====== Advanced Building and Debugging Information for Xfce components ====== While the basic build steps are explained here, this page provides some information about build specifics you probably will need on special occasions. ===== Debugging with gdb ===== For debian based systems, if you need to debug into dependencies, enable automatic download of debug symbols before calling GDB: export DEBUGINFOD_URLS="https://debuginfod.debian.net" First make sure the application you want to debug is not running. After that, you can start it like this: gdb --args build/myapp/myapp-binary E.g. for thunar: gdb --args build/thunar/thunar Usually it is a good idea to automate the quitting and to bail out on the first warning: build/thunar/thunar -q; gdb --args build/thunar/thunar --g-fatal-warnings On a freeze, get a backtrace of all threads via thread apply all bt ===== Build with documentation ===== meson setup --reconfigure -Dgtk-doc=true build meson compile -C build Documentation can be found below ''build/docs'' ===== Use introspection / GtkInspector ===== ''GtkInspector'' is a very nice tool to debug visual things during runtime. First you need to build the project with introspection support: Pre requirements: * install package libgirepository1.0-dev * gsettings set org.gtk.Settings.Debug enable-inspector-keybinding true Building: meson setup --reconfigure -Dintrospection=true build meson compile -C build Then you can start ''GtkInspector'' for the application by pressing {key>Ctrl+Shift+D} or {key>Ctrl+Shift+I} during runtime [[https://developer.gnome.org/documentation/tools/inspector.html|Here some general gtk inspector information]] ===== Static analysis ===== ==== Build with scan-build ==== ''scan-build'' does some static code analysis for a project. It can be used like this: # using --reconfigure won't work ... you need to remove the build folder! rm -rf build # setup and build the project ... the concrete version of scan-build to use can differ CC=clang scan-build-19 --use-cc=clang meson setup build CC=clang scan-build-19 --use-cc=clang meson compile -C build The reports are in HTML and can be viewed with a browser ==== Build with gcc static analyzer ==== rm -rf build CPPFLAGS=-fanalyzer meson setup build meson compile -C build ==== Run cppcheck ==== You need to have xfce4-dev-tools >= 4.21.2 installed for this to work, so cppcheck founds the file ''$cppcheck_cfg_prefix/cppcheck/cfg/xfce.cfg''. If the default ''$cppcheck_cfg_prefix'' (''$libdir'') doesn't work for you (it works on ubuntu, so probably on any debian derived distro), you'll have to set it at configure time when building xfce4-dev-tools using the ''--with-cppcheck-cfg-prefix'' command line option. See also the comment in the cppcheck job in [[https://gitlab.xfce.org/xfce/xfce4-dev-tools/-/blob/master/ci/build_project.yml|xfce4-dev-tools/ci/build_project.yml]] for more info on how to populate the file ''.cppcheck-false-positives'', and [[https://gitlab.xfce.org/xfce/xfce4-dev-tools/-/blob/master/ci/xfce.cfg|xfce4-dev-tools/ci/xfce.cfg]] as an example for the file ''.cppcheck.cfg'' if necessary. cppcheck -i build -j $(nproc) $([ -f .cppcheck.cfg ] && echo --library=.cppcheck.cfg) --library=gtk --library=xfce -I . \ --suppressions-list=<(awk -F : '{print $1 ":" $2}' $([ -f .cppcheck-false-positives ] && echo .cppcheck-false-positives || echo /dev/null) | sort -u) \ --enable=style --suppress=variableScope --suppress=constParameterPointer --suppress=constVariablePointer --suppress=constParameterCallback \ --enable=information --check-level=exhaustive --force --suppress=unmatchedSuppression \ --enable=warning,performance,portability --error-exitcode=1 $CPPCHECK_ARGS --quiet .