打印所有全局变量/局部变量?


Answers:


487

键入info variables以列出“所有全局和静态变量名称”。

键入info locals以列出“当前堆栈框架的局部变量”(名称和值),包括该函数中的静态变量。

键入info args以列出“当前堆栈框架的参数”(名称和值)。


2
@KennyTM,输出中的静态变量名称info variables应该是该编译单元中的静态变量,对吗?
cpuer 2011年

3
@cpuer:不一定。它仅在符号表中显示名称。例如,在Mac上使用gcc时,静态变量yy.1913在编译时重命名为。
kennytm 2011年

1
@KennyTM,函数内部的静态变量是否与函数外部的静态变量(在符号表中)存储的方式相同?
cpuer 2011年

2
@cpuer:它们的存储方式相同,但符号名称会有所不同。假设您y在函数中有一个静态变量,fooy在中有另一个bar。为了区分它们,必须为这两个分配不同的名称y
kennytm 2011年

1
@KennyTM,还有,能否分别声明和定义变量?
cpuer 2011年

110

如果您想查看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) 

4
select-frame可以缩写为sel。也可以使用frame/ f,也可以打印框架)
user202729

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.