This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: Is c++ debugging really "this" bad?
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: Peter Thompson/Amy Kirschner <amypeter at rcn dot com>
- Cc: gdb at sources dot redhat dot com
- Date: Mon, 29 Jul 2002 23:03:15 -0400
- Subject: Re: Is c++ debugging really "this" bad?
- References: <3D46008C.DCD89FAF@rcn.com>
On Mon, Jul 29, 2002 at 10:57:16PM -0400, Peter Thompson/Amy Kirschner wrote:
> I'm doing some contract work helping a small company with their tool
> issues and have run across a nasty c++/gdb interaction. I've been
> checking the archives and I find some related bugs in the c++ area, but
> not the specific issue I'm running into.
>
> The basic problem. Printing the value of 'this', the c++ object
> pointer, does not agree with a simple printf of 'this' in the same
> routine. The particular routine I'm looking at is a destructor routine,
> and I have seen reasonable values of 'this' in other routines, but the
> wrong behavior seems to occur more often. Or maybe just gets reported
> to me more often...
>
> Some details: We're using the 3.0.1 version of gcc and gdb with a mips
> 32 instruction set. We do have a version of 3.0.4 available, but have
> not done extensive testing with that. Gdb first looks for a local
> variable, $this, but doesn't find it in the current scope, or any
> containing scope. Then it attempts to find 'this' in the local scope,
> and, failing that, looks to the outer scope where it does eventually
> find a 'this' variable, which is of course totally unrelated. Our
> standard compilation options are (among a variety of others) -g and -O1.
> I've tried -g -O0, -g by itself (pretty much the same, eh?), -g3 -O1,
> and while -O0 produces a local copy of 'this', it still doesn't find the
> right value. The gcc compiler I'm using produces a .mdebug section,
> which contains ecoff data, and does not recognize a -gdwarf or -gdwarf-2
> option.
>
> I keep getting the feeling that maybe I'm just missing something basic,
> or the debugger is. Certainly the compiler knows where the real value
> is, and I can track it via the machine code for any line that
> manipulates 'this', but I don't expect all the users to be able to do
> that readily. Does this ring any bells with anyone?
I've never specifically seen the debugger lose track of 'this' in
destructors, but I haven't tried in a little while.
With GCC 3.0.1 (and mdebug to boot) you can't really expect C++
debugging to work. The required changes for stabs debugging of C++
code are only in later releases; I think 3.0.4 was fixed but I'm not
sure. Use 3.1.1 if possible. That will require a matching binutils
upgrade.
You didn't mention what version of GDB you were using, also.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer