Как показать, какие поля имеет структура в GDB?

я наткнулся на сооружение под названием ngx_http_variable_value_t в моем сеансе GDB, и я хотел бы напечатать, какие поля он имеет в консоли.

это возможно?

6 ответов


вы можете использовать команду GDB ptype для вывода определения структуры или класса.


Если у вас есть встроенные символы отладки, вы должны просто иметь возможность печатать значение:print variable или print *variable если это указатель на struct.


set print pretty on

эта опция также дает новые строки и отступы для p *my_struct_pointer.

что вы предпочитаете:

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

или:

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

в дополнение к использованию опции командной строки можно также использовать графические отладчики. Я предлагаю gdbgui, но их довольно много.

screenshot

отказ от ответственности: я разработчик gdbgui


Я сделал это только через графические интерфейсы для gdb. Нашел эту запись в GDB online docs. Надеюсь, это поможет. Я считаю, что для этого потребуется, чтобы код был создан с отладочной информацией.

ptype [arg] ptype принимает те же аргументы, что и whatis, но печатает подробное описание типа, а не только имя типа.

отладка с помощью GDB: Symbols


Я хотел бы взглянуть на Экран Отладчика Данных.