How do I show what fields a struct has in GDB?

2019-01-30 06:48发布

问题:

I came upon a struct called ngx_http_variable_value_t in my GDB session and I would like to print what fields it has in the console.

Is that possible?

回答1:

You can use the GDB command ptype to print out the definition of a struct or class.



回答2:

If you have debugging symbols built in, you should just be able to print the value: print variable or print *variable if it's a pointer to a struct.



回答3:

set print pretty on

This option also gives newlines and indentation for p *my_struct_pointer.

Which do you prefer:

$2 = {path = {mnt = 0xffff8800070ce1a0, dentry = 0xffff880006850600},last = {{{hash = 3537271320, len = 2}, hash_len = 12127205912}, name = 0xffff88000659501c "../b.out"}

or:

$3 = {
  path = {
    mnt = 0xffff8800070ce1a0, 
    dentry = 0xffff880006850600
  }, 
  last = {
    {
      {
        hash = 3537271320, 
        len = 2
      }, 
      hash_len = 12127205912
    }, 
    name = 0xffff88000659501c "../b.out"
  },
}


回答4:

In addition to using the command line option, you can also use graphical debuggers. I suggest gdbgui, but there are quite a few out there.

Disclaimer: I am the developer of gdbgui



回答5:

I've only done this through graphic front ends for gdb. Found this entry in gdb online docs. Hope it helps. I believe this will require that the code was created with debugging info included.

ptype [arg] ptype accepts the same arguments as whatis, but prints a detailed description of the type, instead of just the name of the type.

Debugging with GDB:Symbols



回答6:

I would have a look at the Data Display Debugger.



标签: c emacs gdb nginx