diff options
Diffstat (limited to 'tdeioslave/DEBUG.howto')
-rw-r--r-- | tdeioslave/DEBUG.howto | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/tdeioslave/DEBUG.howto b/tdeioslave/DEBUG.howto new file mode 100644 index 000000000..537d6f7ec --- /dev/null +++ b/tdeioslave/DEBUG.howto @@ -0,0 +1,89 @@ +This document describes how you can debug an io-slave with gdb. + +How does an io-slave get started? +================================= + +Your application request 'tdelauncher' via DCOP for a slave. If 'tdelauncher' does +not have an idle slave ready, it will ask tdeinit to start a new one. +tdeinit forks and dlopens the library that contains the io-slave. +Then it calls kdemain() or, if that is not present, main() in the library. + + +Attaching gdb to a io-slave +=========================== + +Due to the above sequence it is rather hard to get an io-slave in your +debugger. But wait there is hope. You can start tdelauncher in such a way +that slaves for a certain protocol are started in debug mode. + +E.g. to start all 'http' slaves in debug mode, you type: + + TDE_SLAVE_DEBUG_WAIT=http tdeinit + +This will restart 'tdeinit' and 'tdelauncher'. + +When your application now requests a http slave, the slave will be started +by tdeinit, but before it calls kdemain() (cq. main()) it will suspend the +slave by sending it a SIGSTOP signal. + +In the terminal from which you started tdeinit you will get the following +message: + +tdeinit: Suspending process +tdeinit: 'gdb tdeinit 16779' to debug +tdeinit: 'kill -SIGCONT 16779' to continue + +You can now debug your slave by typing (or pasting) 'gdb tdeinit 16779' in +a terminal. If you don't want to debug a slave you can let it continue by +sending it a SIGCONT by typing 'kill -SIGCONT 16779'. + +Be aware that slaves will not be killed while they are suspended. + +Once you have started gdb, you can set e.g. breakpoints and then resume the +slave by typing 'continue'. The debugger will return immediate with a message +that a SIGSTOP has been received so you will have to type 'continue' a second +time. + + +Debugging io-slaves with valgrind +================================= + +TDELauncher can be told to run certain io-slaves through valgrind. The following +command can be used to let tdelauncher run all https io-slaves via valgrind: + + TDE_SLAVE_VALGRIND=https tdeinit + +The valgrind output will appear as the stderr output of the tdeinit process. +The $VALGRIND_OPTS environment variable can be used to pass options to valgrind. +If you want to use a different skin: + + TDE_SLAVE_VALGRIND_SKIN=calltree ( for example ) + + +How to get debug output +======================= + +It is useful to redirect the debug output of your particular slave to a file +instead of stderr. E.g. I myself use the following lines in +$TDEDIR/share/config/kdebugrc. + + [7113] + InfoOutput=0 + InfoFilename=/tmp/http + [7103] + InfoOutput=0 + InfoFilename=/tmp/http + +This redirects all debug info for areas 7103 and 7113 (as used by tdeio_http) +to the file /tmp/http. + +To get debug information from the SMB slave you can add the following to +tdeioslaverc: + +[SMB] +DebugLevel=100 + +This will print additional debug info to the stderr of your tdeinit process, +which typically ends up in ~/.X.err or ~/.xsession-errors + +Happy debugging. |