This is the mail archive of the
mailing list for the GDB project.
single-step SIGALRM issue
- From: Laszlo Benedek <laszlo dot benedek at gmail dot com>
- To: gdb at sourceware dot org
- Date: Mon, 19 Jan 2009 18:50:00 +0100
- Subject: single-step SIGALRM issue
I am part of a team developing a simulator and we have problems
debugging the simulator with gdb.
The simulator is an application written for x86-linux and it was
written in c/c++.
It uses the SIGALRM signal to simulate interrupts.
The test that fails:
I start the simulator in gdb and insert a breakpoint at a certain function call.
When the program reaches the breakpoint it correctly stops, then I try
to use single stepping.
At this point something wierd happens, sometimes it works fine and I
can use the step command
but sometimes the program starts to run and then hangs.
I tried to find the reason of this and here is what I've found. When
gdb starts single stepping
it is expecting a SIGTRAP signal but sometimes it receives a SIGALRM
instead. In this case it
decides to switch the inferior in 'continue' mode, inserts a
breakpoint and waits. In this case our
program continues to run from the original breakpoint and eventually
it reaches a point where it calls sigsuspend
and it waits for signals but it does not receive any signals anymore.
It seems that gdb is blocking them somehow
when this single-step => continue switch happens. I read the comment
in the gdb source and it says that gdb expects
that the program's signal handler will be called and it will stop at
the return of the signal handler because gdb just
inserted a breakpoint there. For some reason the signal handler of our
program is not called at all after it gets into this 'continue' mode.
I'd like to fix this or at least decide if this is an error in gdb or
in the simulator (or both?), but I don't really know how to continue.
Has anyone experienced anything like this before ?
Any comment, idea would be appreciated.
Thanks for your help in advance!