This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: C++ debugging pain
On date Tuesday 2008-08-26 09:36:35 -0700, Paul Pluzhnikov wrote:
> On Tue, Aug 26, 2008 at 9:22 AM, Stefano Sabatini
> <stefano.sabatini-lala@poste.it> wrote:
>
> > * "class X does not have any method named Y": this happens with
> > virtual methods defined in a parent class rather than in the class
> > of the instance debugged
>
> Try "set print object on".
> (I am working on a fix which would make that unnecessary).
I checked my gdbinit, I already had the command:
set print object
I think it should be equivalent to your command.
BTW I forgot to give my gdb version:
gdb --version
GNU gdb 6.8-debian
> > * "Cannot resolve method (null)X to any overloaded instance":
> > this happen when I try to invoke a method on some object
>
> This usually happens when you have a pointer to Foo, and do:
>
> print p.virtfn()
>
> Instead, try:
>
> print p->virtfn()
>
> (I am also working on that fix).
>
> > I've been already advised by Daniel Jacobowitz (thanks Daniel) that
> > it could depend on the method invoked being inlined.
Another problem which I'm facing is that I sometimes can't set
breakpoints on some functions, for example:
(gdb) b PUDPSocket::WriteTo()
Function "PUDPSocket::WriteTo()" not defined.
(gdb) b PUDPSocket::WriteTo
the class PUDPSocket does not have any method named WriteTo
Hint: try 'PUDPSocket::WriteTo<TAB> or 'PUDPSocket::WriteTo<ESC-?>
(Note leading single quote.)
Note also the inconsistency in the feedback message.
These are classes from the libpt, but now I'm not sure they've been
compiled with the right options (-O0 -ggdb) due to messy build system
implemented for that library.
> If you compiled without '-O*', no inlining should have happened.
> If you do compile with '-g -O2', you are inflicting pain on yourself.
Well being a programmer I like to inflict myself pain, but I'm not that
masochistic ;-), always use -O0 -ggdb when compiling.
BTW I'd be glad to help testing, feel free to contact me if you need
some tester for those fixes.
Thanks for your precious help.
Regards.