[Haifux] Multi-thread debugging for C++ on Linux

guy keren choo at actcom.co.il
Fri Nov 28 19:40:10 MSK 2008


i did not understand what feature you want.

gdb supports suspending all the threads together (which is what you 
normally want), continuing all of them together, and doing a single-step 
in one thread (which has the annoying side-effect of allowing other 
threads to also continue executing at the same time - this is the one 
feature of gdb which i find annoying).

generally, i don't debug multi-threaded programs using a debugger. i use 
logs, a single log file, where each line contains the thread-id (so 
you'll be able to filter out messages belonging to a single thread of 
execution). i use the debugger for two major activities:

1. debugging a crashed process (i.e. analysis of a code file) - gdb 
supports this and shows you the stacks and variables of all the threads.

2. break-pointing a program at a given command (or when a given memory 
address is being altered or accessed) - and studing the state of the 
program without single-stepping.

if you find the solution to single-stepping a single thread - let me 
know. this will be a nice feature. i once thought i saw a way to do it, 
but when i searched for this again - i didn't find it.

--guy

Ohad Lutzky wrote:
> Hello all,
> 
> I am examining the issue of debugging multi-threaded (specifically using 
> pthreads, and written in C or C++) applications in Linux. The basic 
> tools, as far as I can tell, are somewhat lacking; while the DDD 
> documentation does have a screenshot showing a "suspend" button in 
> Status->Threads, this does not show up in my version of ddd (3.3.11), 
> and I can't really figure out how to do this from within gdb. Is it even 
> possible? As far as I know, this is possible with Java, and I'm guessing 
> that it has to do with additional JRE instrumentation (the debugger 
> tells JRE to suspend the thread, and while the Linux thread is running, 
> the JRE code therein does a sched_yield).
> 
> So my question are:
> 1. Am I missing something, and this is in fact possible with GDB? If so, 
> is there a graphical interface (my coworkers are fond of those...) which 
> supports this?
> 2. Is there a different Linux (on x86) debugger which does support this?
> 3. What is the situation of this problem on other OSes?
> 4. What other neat thread-related debugging tools (other than suspending 
> individual threads, that is) are there, and which debuggers support them?
> 
> I've been trying to google the answers to these questions, but so far 
> I've come up short. Any wise keywords would be appreciated :)
> 
> -- 
> Man is the only animal that laughs and weeps, for he is the only animal 
> that is struck with the difference between what things are and what they 
> ought to be.
> - William Hazlitt
> 
> Ohad Lutzky
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Haifux mailing list
> Haifux at haifux.org
> http://hamakor.org.il/cgi-bin/mailman/listinfo/haifux




More information about the Haifux mailing list