This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: QUERY: Pretty-printing C++ classes in gdb
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: Bradford Chamberlain <brad at cs dot washington dot edu>
- Cc: gdb at sources dot redhat dot com
- Date: Fri, 8 Mar 2002 21:58:29 -0500
- Subject: Re: QUERY: Pretty-printing C++ classes in gdb
- References: <20020308165335.L25327-100000@gnocchi.cs.washington.edu>
On Fri, Mar 08, 2002 at 04:56:43PM -0800, Bradford Chamberlain wrote:
>
> (I hope the following is not a FAQ. I didn't find one on the gdb page.)
>
> I am curious whether gdb has hooks that would allow me to provide a means
> of pretty-printing C++ classes without modifying the gdb source code.
> For example, imagine that I am supplying you with a C++ class library, and
> want to save you the hassle of inspecting the guts of my classes and
> understanding their inner workings when debugging your code that uses
> them. Rather, I'd like to cause "p instanceOfClassFoo" to give you a
> clean view of the class that doesn't require understanding its
> implementation.
>
> One way to do this would be to hack the source, perhaps treating my
> library as a new language. However, I'd like to avoid changing the gdb
> source both for simplicity and so that I don't have to ship users a new
> copy of gdb. So is there a less intrusive way that I can hook my pretty
> printing in? For example, I could imagine that a well-defined method name
> or operator<< overload might be utilized by gdb if it exists. Or that
> perhaps I can give you a dot-file that will be used at load time to
> configure the behavior.
>
> Any information on whether such a feature exists, or other possible
> workarounds would be appreciated.
The standard way to do this is:
- Provide a .gdbinit. Placed in the current working directory or in
$HOME, it lets you specify commands to be executed.
- Provide utility functions or methods to print each class however
you wish.
- Provide aliases in the former to call the latter.
GDB will probably never do this by default for some method name or
operator overload; it is not appropriate (what if the functions affect
state?). Be sure to write the print functions carefully.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer