我该如何打印所有的全局变量/局部变量?在gdb中是否有可能实现?
输入命令info variables
来列出“所有全局变量和静态变量名称”(列表很长)。
输入命令info locals
来列出“当前堆栈帧的本地变量”(包括该函数中的静态变量)的名称和值。
输入命令info args
来列出“当前堆栈帧的参数”(名称和值)。
info locals
之前使用select-frame
。(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)
select-frame
可以缩写为 sel
。或者可以使用 frame
/f
,它们也会打印框架。 - user202729另外,由于info locals
不会显示你所在函数的参数,请使用
(gdb) info args
例如:int main(int argc, char *argv[]) {
argc = 6*7; //Break here.
return 0;
}
info locals
命令不会显示argc
和argv
,它会显示消息"No locals."
参考: info locals command.
info variables
命令的输出中,静态变量名称应该是在该编译单元内的静态变量,对吗? - cpuery
会被重命名为y.1913
。 - kennytmfoo
中有一个静态变量y
,在bar
中还有另一个y
。为了区分它们,必须为这两个y
赋予不同的名称。 - kennytminfo var
可以显示变量在哪里被定义,但对于本地变量则不行。 - kennytm