See Also

Building Xfce
How to compile Xfce from source to provide better debug information.

Debug Logs

On startup the panel checks the environment variable PANEL_DEBUG. If you want to test this, you can open a terminal, run xfce4-panel -q to exit the running instance. Then run PANEL_DEBUG=1 xfce4-panel and you will see the panel starts to output to stderr.

The messages look like xfce4-panel (<module>): <some message>. It will print all sorts of information about panel positioning, plugins that are started, etc.

The value 1 enabled default logging, but some modules and plugins have more detailed logging that will normally clutter the log output. To show this you can specify the module name like PANEL_DEBUG=display-layout.
Other valid debug domains are: application, applicationsmenu, base-window, display-layout, external46, external, main, module-factory, module, positioning, struts, systray, tasklist. You can also use all or combine options by creating a comma-separated list to show multiple domains in detail at the same time.

Debugging Plugins

If an external plugin crashed, the panel will automatically restart it or ask the user what to do if the plugin crashed more then once within 60 seconds. Nonetheless we all know this should never happen, so the panel provides tools to help debugging plugins.

GDB

If you start the panel with PANEL_DEBUG=gdb and gdb is installed on your computer, all external plugins will be started in gdb. The output of gdb is written to /tmp/<stamp>_gdb_<plugin-name>_<plugin-id>.log. If the plugin segfaults, it will automatically create a backtrace full and dump info registers.

This does not mean the output contains valuable information. For good backtraces it is still recommended to create a debug-build of the plugin.

Valgrind

To detect memory leaks and corruptions, it is also possible to run plugins in valgrind. For this start the panel with PANEL_DEBUG=valgrind. Logs will be written to the same location as the gdb logs.