Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
howto:panel_plugin_debug [2012/07/04 10:44] – [Temporarily capturing messages to stdout and stderr] belnac | 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 -q | ||
- | |||
- | * 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 -q | ||
- | $ 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 / | ||