我正在使用gdb调试一个c可执行文件。我有这个简单的文件
int main() { char *secret = "secret"; char *buf = "hey"; write(1, buf, 250); }
字符集然后用gdb运行。然后我想在堆栈上看到变量secret。但是我不知道该怎么做,我试过了:
secret
$ info locals No symbol table info available.
型没有效果。那么如何找到变量的位置呢?
5kgi1eie1#
为了让GDB知道局部变量的位置,您必须使用-g标志编译源代码。
-g
uwopmtnx2#
如果使用-g标志进行编译并在main中的某处设置断点,应该会得到一个结果。如果你还没有运行程序,或者让它完成,你将看不到局部变量。举例来说:
main
(gdb) b 6 Breakpoint 1 at 0x1004010a3: file sec.c, line 6. (gdb) r [.....] Thread 1 "sec" hit Breakpoint 1, main () at sec.c:6 6 write(1, buf, 250); (gdb) info locals secret = 0x100403000 "secret" buf = 0x100403007 "hey"
字符集或者,你可以打印一个变量来查看地址:
(gdb) print secret $1 = 0x100403000 "secret"
型对于像int这样的东西,你必须使用print &x来查看地址,因为print x只显示值。
int
print &x
print x
6fe3ivhb3#
info variables YOUR_VARIABLE应该输出变量的源位置:举例来说:
info variables YOUR_VARIABLE
(gdb) info variables quote_quoting_options All variables matching regular expression "quote_quoting_options": File lib/quotearg.c: 1044: struct quoting_options quote_quoting_options;
字符集
3条答案
按热度按时间5kgi1eie1#
为了让GDB知道局部变量的位置,您必须使用
-g
标志编译源代码。uwopmtnx2#
如果使用
-g
标志进行编译并在main
中的某处设置断点,应该会得到一个结果。如果你还没有运行程序,或者让它完成,你将看不到局部变量。举例来说:
字符集
或者,你可以打印一个变量来查看地址:
型
对于像
int
这样的东西,你必须使用print &x
来查看地址,因为print x
只显示值。6fe3ivhb3#
info variables YOUR_VARIABLE
应该输出变量的源位置:举例来说:
字符集