Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: Michael FIG <michael-dated-1177036471.79d946@fig.org>
Cc: gdb@sourceware.org
Subject: Re: debugging a program that uses SIGTRAP
Date: Wed, 21 Mar 2007 14:14:00 -0000	[thread overview]
Message-ID: <20070321141522.GF21799@adacore.com> (raw)
In-Reply-To: <7qtzwfuxxk.fsf@babe.fig.org>

> Okay.  I thought somehow GDB would pass SIGTRAP iff it knows it has
> not set a breakpoint on the current instruction pointer by scanning
> its list of breakpoints.
> 
> > Even if you get past that point, your handler will now get called
> > every time GDB hits a breakpoint or single steps - single stepping
> > will probably be broken.
> 
> Would the above suggestion be reasonable?  I think it would behave
> nicer than what I have now, especially for my circumstance, since
> there isn't any overlap between the code I'm trying to debug and the
> code _it's_ trying to debug.

As Daniel said, this is one of the trickiest parts of GDB. At first
glance, I think your suggestion above will not work, because of single
stepping. Each single-step operation ends with a SIGTRAP at the location
where the single-step finished, and chances are you have no breakpoint
at that location. This SIGTRAP is not to be passed back to the inferior.
You may think of adding some extra logic that guesses whether the SIGTRAP
comes from your single-step or from another source, but I think the logic
will be very fragile. Normally, all you are guarantied is that the program
will stop once it gets outside a given code range. But in fact, in can
stop anytime, even when inside that range. Try "set debug infrun 1" and
then do a few single steps; have a look at the output on x86-linux.

The way to achieve what you are suggesting, I think, is to use "software
single-step", which means single-stepping achieved by way of breakpoints
rather than using the kernel single-step. I don't think this is
implemented on x86, however.

Sorry, but I think you're pretty much stuck in your case. Can you not
use anything other than SIGTRAP?

-- 
Joel


  parent reply	other threads:[~2007-03-21 14:14 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-21  2:06 Michael FIG
2007-03-21  2:18 ` Daniel Jacobowitz
2007-03-21  2:34   ` Michael FIG
2007-03-21 11:14     ` Daniel Jacobowitz
2007-03-23  4:30       ` Michael FIG
2007-03-21 14:14     ` Joel Brobecker [this message]
2007-03-21 18:51     ` Michael Snyder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070321141522.GF21799@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb@sourceware.org \
    --cc=michael-dated-1177036471.79d946@fig.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox