Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
howto:panel_plugin_debug [2009/01/14 07:12] – redone this page, also with gdb 88.172.125.130 | howto:panel_plugin_debug [2012/07/04 10:44] – [Temporarily capturing messages to stdout and stderr] belnac | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Panel Plugin Debugging ====== | ====== Panel Plugin Debugging ====== | ||
- | Debugging external panel plugins is possible by wrapping the executable against a shell script that runs a debug tool. | + | Debugging |
- | The exec command is available inside the desktop entry file that is shipped with every panel plugin. | + | 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. | 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 also use as example a plugin called clipman that is installed inside the prefix /usr/local. | + | 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) ===== | ===== Debug with Valgrind (full example) ===== | ||
Line 21: | Line 21: | ||
#!/bin/sh | #!/bin/sh | ||
valgrind --log-file=$HOME/ | valgrind --log-file=$HOME/ | ||
- | / | + | / |
* Now you can add the plugin " | * Now you can add the plugin " | ||
Line 28: | Line 28: | ||
{{wiki: | {{wiki: | ||
- | ==== More useful call to Valgrind | + | === More useful call to Valgrind === |
G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --tool=memcheck --leak-check=full \ | G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --tool=memcheck --leak-check=full \ | ||
Line 46: | Line 46: | ||
#!/bin/sh | #!/bin/sh | ||
- | gdb -ex r -ex bt -ex q --args / | + | gdb -ex r -ex bt -ex continue |
> $HOME/ | > $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 ====== | ====== Some tips ====== | ||
* By creating your own desktop entry file, it will never get overwritten by any installation, | * 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 / | + | * You can point the Exec= key to your development directory, for instance / |