This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
C++ Typedefs and symbol tables
- From: Andrew STUBBS <andrew dot stubbs at st dot com>
- To: GDB List <gdb at sourceware dot org>
- Date: Mon, 20 Aug 2007 18:10:42 +0100
- Subject: C++ Typedefs and symbol tables
Hi,
I have encountered a problem setting breakpoints on overloaded C++
functions: when I specify the function signature, I have to use the
canonical type name, not the typedef name used in the source I am
looking at. (I am aware it prompts where no signature is given, but that
possibility is not available to scripts, for example).
I'm using GDB 6.5 here. Apologies if this is a well known problem I've
somehow failed to find on Google, or has been fixed since then.
E.g.
class C;
typedef C t;
void f (t);
(gdb) break f(C) -> OK
(gdb) break f(t) -> bad
"info functions" lists the function using the name "C". This is
consistent with nm, so I assume it is getting this from the symbol
table. I suppose it makes sense that the signature in the symbol table
uses the canonical name.
The dwarf debug information, on the other hand, shows the function with
the typedef name used in the source code. It also contains the proper
mapping from typedef name to actual class name.
Would it not be possible to use the debug information, where available,
to canonicalize the type names before attempting to match the function
signatures, at least for the purposes of setting breakpoints?
Thanks
Andrew