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

2019-01-30 06:19发布

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?

标签: c emacs gdb nginx
6条回答
Emotional °昔
2楼-- · 2019-01-30 06:33

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.

screenshot

Disclaimer: I am the developer of gdbgui

查看更多
太酷不给撩
3楼-- · 2019-01-30 06:35

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

查看更多
不美不萌又怎样
4楼-- · 2019-01-30 06:40

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

查看更多
霸刀☆藐视天下
5楼-- · 2019-01-30 06:40

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"
  },
}
查看更多
时光不老,我们不散
6楼-- · 2019-01-30 06:46

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.

查看更多
你好瞎i
7楼-- · 2019-01-30 06:58

I would have a look at the Data Display Debugger.

查看更多
登录 后发表回答