Печать всех глобальных переменных / локальных переменных?

209

Как распечатать все глобальные переменные/локальные переменные? Возможно ли это в gdb?

Теги:
variables
gdb
global-variables

3 ответа

334
Лучший ответ

Введите info variables, чтобы отобразить "Все глобальные и статические имена переменных".

Введите info locals, чтобы отобразить "Локальные переменные текущего кадра стека" (имена и значения), включая статические переменные в этой функции.

Введите info args, чтобы отобразить "Аргументы текущего фрейма стека" (имена и значения).

  • 2
    @ KennyTM, имена статических переменных в выходных данных info variables должны быть статическими переменными в этом модуле компиляции, верно?
  • 3
    @cpuer: не обязательно. Он отображает только имя в таблице символов. Например, с gcc на Mac статическая переменная y переименовывается в y.1913 при компиляции.
Показать ещё 6 комментариев
69

Если вы хотите увидеть локальные переменные вызывающей функции, используйте select-frame до info locals

например:.

(gdb) bt
#0  0xfec3c0b5 in _lwp_kill () from /lib/libc.so.1
#1  0xfec36f39 in thr_kill () from /lib/libc.so.1
#2  0xfebe3603 in raise () from /lib/libc.so.1
#3  0xfebc2961 in abort () from /lib/libc.so.1
#4  0xfebc2bef in _assert_c99 () from /lib/libc.so.1
#5  0x08053260 in main (argc=1, argv=0x8047958) at ber.c:480
(gdb) info locals
No symbol table info available.
(gdb) select-frame 5
(gdb) info locals
i = 28
(gdb) 
  • 3
    ( select-frame может быть сокращен как sel . В качестве альтернативы используйте frame / f , который также печатает кадр)
16

Кроме того, поскольку info locals не отображает аргументы функции, в которой вы находитесь, используйте

(gdb) info args

Например:

int main(int argc, char *argv[]) {
    argc = 6*7;    //Break here.
    return 0;
}

argc и argv не будут отображаться info locals. Сообщение будет "Нет локальных жителей".

Ссылка: информация о локальных файлах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню