Cast to result of whatis expression

Kenneth Rose gdb@kenrose.org
Fri Sep 10 18:09:00 GMT 2010


>>>>>> "Kenneth" == Kenneth Rose <gdb@kenrose.org> writes:
>
> Kenneth> I'm writing something similar to gdb-stl-views for some custom
> Kenneth> container classes that we have.
>
> I think that these days it is better to use the Python pretty-printing
> infrastructure instead.  It has a number of advantages -- it works no
> matter how the object is printed (in a stack trace, embedded in some
> other structure), and it works with MI.
>
> Kenneth> I need to explicitly cast foo.m_x to the appropriate type, but
> Kenneth> I'm at a loss as to how to get that type from gdb.  "whatis
> Kenneth> foo" gives me back "Container<int>".  Is there anyway of
> Kenneth> extracting the "int" part of that result and using that as the
> Kenneth> type to cast to?
>
> You can do this in Python :-)
>
> You could probably do it (with some difficulty) using a combination of
> logging, "shell", and "source".
>
> Kenneth> I'm using the stock GDB that ships with Mac OS X 10.6 (GNU gdb
> Kenneth> 6.3.50-20050815 (Apple version gdb-1461).  I know... it's old.
>
> Ah, Apple's fork.  Unfortunately it is Python-free.
>
> You could try GDB 7.2.  It has some known bugs on Mac OS, but I have
> also heard reports of it work.
>
> Tom
>

Thanks Tom.  Unfortunately, this is for a bunch of developers and I can't
make everyone upgrade to GDB 7.2.  That said, when I was researching how
to do this, the Python stuff looked uber sexy (and uber practical).

I played around with sending the result of "whatis foo" to a shell
command, but couldn't figure out how to actually pass an argument to the
inferior shell with gdb.  The shell command seems to literally interpret
its arguments.  I tried playing with 'set environment', but the inferior
shell didn't seem to pick up any of the env. variable declarations.

Anyways, I've ended up just passing the type to my pvector command.  For
example, "pvector myContainer int".  It's not so bad because I can get gdb
to tell me the container's value type with whatis.  I just need to
manually copy and paste it myself as an argument to pvector.  Since I run
gdb in emacs, this is pretty easy.

Thanks again,

-- kenrose




More information about the Gdb mailing list