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

gabik gabik at cs.technion.ac.il
Fri Nov 28 19:17:38 MSK 2008


Hi
 
This is an interesting issue you have raised here.
Indeed, in JVM it seems to be more easy to breakpoint a thread, but actually
there is nothing too special that Java does that other native debugger can't
do.
One type of breakpoints is called software breakpoints and are based on int3
Intel instruction (special type of software trap/exception, like int0x80 sys
call). It should be inserted at the code level.
So as long as the threads are kernel threads and have different pids (which
is what happens in latest fixed versions of POSIX Linux threads), it should
be possible to breakpoint each thread separately.
There is also something called hardware breakpoints:
http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspx
They are used to data breakpoints - when ever some data address changes, it
breakpoints the program. But never mind about them.
 
As for the gdb and DDD, check these out:
 
 <http://www.gnu.org/manual/ddd/html_mono/ddd.html#Threads>
http://www.gnu.org/manual/ddd/html_mono/ddd.html#Threads
 
http://sources.redhat.com/gdb/current/onlinedocs/gdb_6.html#SEC49
 
I would also add that being able to stop a specific thread may indeed be
useful, but you should not rely on such a kind of debugging to ensure
correctness of your multithreaded program. You should do a much more
thorough different-concurrent-scenarios debugging and than printfing and
asserts might be more useful.
 
Gabi

 
 
  _____  

From: haifux-bounces at haifux.org [mailto:haifux-bounces at haifux.org] On Behalf
Of Ohad Lutzky
Sent: Friday, November 28, 2008 5:12 PM
To: Haifux
Cc: Yigal Korman
Subject: [Haifux] Multi-thread debugging for C++ on Linux


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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://haifux.org/pipermail/haifux/attachments/20081128/6f6e6af6/attachment.html 


More information about the Haifux mailing list