C语言 广发行,我怎么找到变量的位置

yhuiod9q  于 2023-08-03  发布在  其他
关注(0)|答案(3)|浏览(110)

我正在使用gdb调试一个c可执行文件。
我有这个简单的文件

int main() {
    char *secret = "secret";

    char *buf = "hey";
    
    write(1, buf, 250);
}

字符集
然后用gdb运行。然后我想在堆栈上看到变量secret。但是我不知道该怎么做,我试过了:

$ info locals
No symbol table info available.


没有效果。那么如何找到变量的位置呢?

5kgi1eie

5kgi1eie1#

为了让GDB知道局部变量的位置,您必须使用-g标志编译源代码。

uwopmtnx

uwopmtnx2#

如果使用-g标志进行编译并在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只显示值。

6fe3ivhb

6fe3ivhb3#

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;

字符集

相关问题