Getting the "description" of a variable

Siva Chandra <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAGyQ6gzkzc0oD_=hZ242DGuGCZnN7svuh=HrEeOj1UXVz1Lj+Q@mail.gmail.com>
Hello,

As with most of my questions, I am really not sure if the subject line
is good/apt for my question. The question is, "how can I get the
description of a variable from the GDB command line?"

By description, I mean this:
1. File and line it is declared at.
2. Its type and scope.

I think GDB already has ways to get this information using multiple commands.

My use case can be illustrated with an example. Consider the following
C++ snippet.

class Counter
{
public:
  int inc();

  int count;
};

int
Counter::inc ()
{
  count++;
  return count;
}

class A
{
public:
  int inc();

  static Counter counter;
};

Counter A::counter;

int
A::inc ()
{
  counter.inc(); // Break here
}

int
main ()
{
  A a;

  a.inc();

  return 0;
}

Lets say I am new to this code and single stepping through it and
currently stopped at the line marked with "Break here". I now want to
know what this variable "counter" is. I print its value, and print its
type. If I do "info variables counter", one of the results is
"A::counter" and I realize that it is a static member of class A.
Next, I can use gdb.lookup_symbol('A::counter') to get to the filename
and line number where it is declared. There are a few problems I face
when I use this kind of workflow:

1. Too many steps to get to what I want. If I am interrupted, I loose
track of where I am and will have to start from the beginning all
over.
2. gdb.lookup_symbol('counter') returns (None, True). I have to use
gdb.lookup_symbol('A::counter').
3. The filename and line number I get via gdb.lookup_symbol is mostly
likely the location where the static member is declared out of the
class in a *.cc file. This is not good enough because the comments
describing this member are typically found in a *.h file where the
class is defined. So, I will need another step via
gdb.lookup_symbol('A') to get to the line and file where the class A
is defined.

Is there a shorter workflow to get the same information already existing in GDB?

If not:

1. Is it OK to add more info to 'struct symbol' to store all the files
and lines where a "symbol" is declared. If not 'struct symbol', is
there a better place where such info can be added?
2. If #1 is OK, then, can we add a command 'describe' using GDB Python
which prints the info I am looking for?

Thanks,
Siva Chandra
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.