public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: pmcgarry <pmcgarry@hekimian.com>
To: Laurent Duperval <lduperval@microcelli5.com>,
	GDB Mailing List <gdb@sourceware.cygnus.com>
Subject: RE: Breaking outside of the sources
Date: Tue, 24 Apr 2001 14:14:00 -0000	[thread overview]
Message-ID: <5DC9745D8405D4119BD700606D1D7472021A6313@thor.hekimian.com> (raw)

> -----Original Message-----
> From: Laurent Duperval [ mailto:lduperval@microcelli5.com ]
> Sent: Tuesday, April 24, 2001 4:22 PM
> To: GDB Mailing List
> Subject: Re: Breaking outside of the sources
> 
> 
> On 24 Apr, Keith Seitz wrote:
> > On Tue, 24 Apr 2001, Laurent Duperval wrote:
> > 
> >> Someone sent an email on the insight list complaining that 
> when gdb is
> >> interrupted, you can find yourself stuck in assembly in a line of
> >> /lib/libc.so instead of a line from your program. He asked 
> whether it was
> >> possible to limit the lines seen to the programs being 
> debugged and not to
> >> see system library stuff. I thought it was a a legitimate question.
> > 
> > If you interrupt a system call (you were blocked in select, 
> poll, read, 
> > write, etc), then gdb dutifully prints out that you are 
> there, because 
> > your program IS there. It is not somewhere else, it is in 
> the system 
> > call, executing code in a (possibly shared) system library.
> > 
> 
> Right.
> 
> > Of course, I could misunderstand this question entirely. It 
> sounds like 
> > the user is requesting that the debugger lie to him about what his 
> > program is executing...
> > 
> 
> Not really. Often, breaking in system libraries doesn't 
> provide interesting
> feedback. If I interrupt the program, most of the time I'm 
> not interested in
> knowing that I was in poll(), select() or other sytem calls. But I am
> interested in knowing in which part of my code the poll(), 
> select()... was
> called. Most of the time it can be done using the stacktrace 
> but for new
> users (especially) it adds an unwanted (unneeded?) level of 
> complexity.
> 
> I think (I dunno, I haven't used them in a while) that's the way MS
> debuggers work.

Actually, the MS VC++ integrated debugger (and all other good debuggers that
I know of) actually break in the system call if that is where you are!  So
it doesn't surprise me at all that gdb would do the same thing - it is the
'right' thing to do.

The reasons are actually quite simple, and the two most important are that
1) that's what most good engineers want anyway, and 2) you want to know
exactly what the code is/was doing when it broke.  

It really should not be considered an added level of complexity; in fact, it
helps you to determine what the nature of your problem actually is.  

For example, if you end up with memory access violations, etc., and they
appear to be occuring in system code, then chances are you have corrupted
pointer data or have overwritten memory, and then you can start focusing on
investigating the calling chain to determine just what caused the bubble to
burst.

Another good example is when you end up with the (n)ever-popular
sprintf/printf problems where parameters don't match up correctly.  Noting
failures in resultant system calls can often point you right to such a
problem.

You can often times get an idea of what caused the problem by investigating
the register sets at the particular point of failure in the system call.
Perhaps you will be lucky enough to note that one of the values looks like
an address, and dereferencing such an address seems to show you some data
that correlates to a routine that you recently changed.  This 'luckiness'
can happen more often than you might think.  :)

Most of these situations can of course be handled via the stack trace or any
other similar mechanism you may have available in your particular debugger -
I am not a consistent user of gdb, so I can't speak as to the facilities
there but I'm sure others on this list can.  From the stack trace, you
should be able to select any of the methods/functions in the calling chain
and investigate the local scope for the individual pieces of code that led
up to the problem itself, which just happened to finally materialize in the
system call.

Finally, remember that some notoriously-difficult-to-debug problems take
time and effort for even expert programmers and expert debuggers to figure
out.  You just have to be ready and willing to fight the good fight!

Pat

             reply	other threads:[~2001-04-24 14:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-04-24 14:14 pmcgarry [this message]
  -- strict thread matches above, loose matches on Subject: below --
2001-04-24 12:31 Laurent Duperval
2001-04-24 13:14 ` Keith Seitz
2001-04-24 13:39   ` Laurent Duperval
2001-04-24 13:48     ` Keith Seitz

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=5DC9745D8405D4119BD700606D1D7472021A6313@thor.hekimian.com \
    --to=pmcgarry@hekimian.com \
    --cc=gdb@sourceware.cygnus.com \
    --cc=lduperval@microcelli5.com \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).