Xfce Wiki

Sub domains
 

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
howto:panel_plugin_debug [2012/07/04 10:44] – [Temporarily capturing messages to stdout and stderr] belnachowto: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.  They are installed inside the directory "''$prefix/share/xfce4/panel-plugins''" If the desktop entry file contains a key **X-XFCE-Module** instead of **X-XFCE-Exec** than it means it is an internal panel plugin.  Internal panel plugins can be debugged by running the tools directly on ''xfce4-panel''. 
- 
-So, this lets you quite some possibilities to wrap an external panel plugin.  You can create a new desktop entry file just for the purpose of running it with a debug tool, you can change the desktop entry file directly to point it to the shell script, or you can rename the panel plugin binary and write a shell script as the original file. 
- 
-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 "''clipman''" that is installed inside the prefix "''/usr/local''". 
- 
-===== Debug with Valgrind (full example) ===== 
- 
-  * Make a copy of the desktop entry file 
- 
-  cp /usr/local/share/xfce4/panel-plugins/clipman.desktop \ 
-  /usr/local/share/xfce4/panel-plugins/clipman-valgrind.desktop 
- 
-  * 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 "Clipman (valgrind)" 
-  * 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/clipman-valgrind.log \ 
-  /usr/local/libexec/xfce4/panel-plugins/clipman "$@" 
- 
-  * Now you can add the plugin "Clipman (valgrind)" to the panel as usual 
-  * You are able to use <code>tail -f $HOME/clipman-valgrind.log</code> 
- 
-{{wiki:information.png}} It'll be really slow as wrapped in valgrind, but you'll be able to hunt memory leaks. 
- 
-=== 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/valgrind.log \ 
-  /usr/local/libexec/xfce4/panel-plugins/xfce4-sensors-plugin $@ 
- 
-===== 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 /usr/local/share/xfce4/panel-plugins/clipman.desktop \ 
-  /usr/local/share/xfce4/panel-plugins/clipman-gdb.desktop 
- 
-  * 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 /usr/local/libexec/xfce4/panel-plugins/clipman $@ \ 
-  > $HOME/clipman-gdb.log 2>&1 
- 
-=== 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 /usr/local/libexec/xfce4/panel-plugins/clipman $(pidof clipman) 
-  ... 
-  (gdb) continue 
- 
-which will find the PID of clipman, and debug it using the debug symbols in /usr/local/libexec/xfce4/panel-plugins/clipman. For this to work, clipman must already be running. You can also attach GDB to a process from the GDB prompt by using the attach command: 
- 
-  (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 'file': 
- 
-  $ 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, and the file doesn't cause any problem. 
-  * You can point the Exec= key to your development directory, for instance /home/john/clipman/panel-plugin/xfce4-clipman-plugin-gdb, and write the shell script xfce4-clipman-plugin-gdb that points to the binary inside your development directory aswell.  This avoids you to install the binary every time, all you will need is to restart the panel (''xfce4-panel -r'') after you compile your plugin :-P