Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| howto:panel_plugin_debug [2010/10/02 17:26] – external edit 127.0.0.1 | howto:panel_plugin_debug [2012/11/26 12:59] (current) – removed nick | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Panel Plugin Debugging ====== | ||
| - | Debugging **external** panel plugins is possible by wrapping the executable against a shell script that runs a debug tool. | ||
| - | |||
| - | The exec command is available inside the desktop entry file that is shipped with every panel plugin. | ||
| - | |||
| - | So, this lets you quite some possibilities to wrap an external panel plugin. | ||
| - | |||
| - | In the examples below we will use the first method that consists into creating a new desktop entry file. We will use as example a plugin called "'' | ||
| - | |||
| - | ===== Debug with Valgrind (full example) ===== | ||
| - | |||
| - | * Make a copy of the desktop entry file | ||
| - | |||
| - | cp / | ||
| - | / | ||
| - | |||
| - | * Edit the new file and change the Name= key to differentiate it from the original plugin, for instance append the name of the debug tool like " | ||
| - | * Change the Exec= key to point it to the shell script (remember the original path, you need it for the shell script) | ||
| - | * Create an **executable** shell script containing: | ||
| - | |||
| - | #!/bin/sh | ||
| - | valgrind --log-file=$HOME/ | ||
| - | / | ||
| - | |||
| - | * Now you can add the plugin " | ||
| - | * You are able to use < | ||
| - | |||
| - | {{wiki: | ||
| - | |||
| - | === More useful call to Valgrind === | ||
| - | |||
| - | G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --tool=memcheck --leak-check=full \ | ||
| - | --show-reachable=yes -v --log-file=$HOME/ | ||
| - | / | ||
| - | |||
| - | ===== Debug with GDB (short example) ===== | ||
| - | If you didn't read the example about Valgrind, do so, it contains mandatory information if you don't understand the following example. | ||
| - | |||
| - | * Make a copy of the desktop entry file | ||
| - | |||
| - | cp / | ||
| - | / | ||
| - | |||
| - | * Change the Exec= key to point it to the shell script (remember the original path, you need it for the shell script) | ||
| - | * Create an **executable** shell script containing: | ||
| - | |||
| - | #!/bin/sh | ||
| - | gdb -ex r -ex bt -ex continue -ex q --args / | ||
| - | > $HOME/ | ||
| - | |||
| - | === Using GDB on running instances === | ||
| - | |||
| - | If you want an interactive debug session with GDB, you can simply find the process id of the plugin by running | ||
| - | |||
| - | $ gdb / | ||
| - | ... | ||
| - | (gdb) continue | ||
| - | |||
| - | which will find the PID of clipman, and debug it using the debug symbols in / | ||
| - | |||
| - | (gdb) attach $PID | ||
| - | |||
| - | Again, the plugin must already be loaded for this to work. | ||
| - | |||
| - | ===== Temporarily capturing messages to stdout and stderr ===== | ||
| - | |||
| - | * Add the plugin to the panel | ||
| - | * Exit the panel: | ||
| - | |||
| - | $ xfce4-panel -x | ||
| - | |||
| - | * Start panel capturing stdout and stderr to file. Note that this will capture all messages from the panel, including all plugins, to ' | ||
| - | |||
| - | $ xfce4-panel > file 2>&1 & disown | ||
| - | |||
| - | * When done capturing, exit the panel and start it again: | ||
| - | |||
| - | $ xfce4-panel -x | ||
| - | $ xfce4-panel & disown | ||
| - | |||
| - | ====== Some tips ====== | ||
| - | * By creating your own desktop entry file, it will never get overwritten by any installation, | ||
| - | * You can point the Exec= key to your development directory, for instance / | ||