From: "Kenneth Rose" <gdb@kenrose.org>
To: "Tom Tromey" <tromey@redhat.com>
Cc: gdb@sourceware.org
Subject: Re: Cast to result of whatis expression
Date: Fri, 10 Sep 2010 18:09:00 -0000 [thread overview]
Message-ID: <35cb13dde5f183ce57b117e677709dd0.squirrel@webmail.kenrose.org> (raw)
In-Reply-To: <m3eid5w65u.fsf@fleche.redhat.com>
>>>>>> "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
next prev parent reply other threads:[~2010-09-10 18:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-07 22:04 Kenneth Rose
2010-09-07 22:16 ` Tom Tromey
2010-09-10 18:09 ` Kenneth Rose [this message]
2010-09-10 19:57 ` Tom Tromey
2010-09-07 22:04 Kenneth Rose
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=35cb13dde5f183ce57b117e677709dd0.squirrel@webmail.kenrose.org \
--to=gdb@kenrose.org \
--cc=gdb@sourceware.org \
--cc=tromey@redhat.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