Xfce Wiki

Sub domains
 

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 [CTRL][SHIFT][D] or [CTRL][SHIFT][I] during runtime

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.1 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 xfce4-dev-tools/ci/build_project.yml for more info on how to populate the file .cppcheck-false-positives, and 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 --quiet .