gpt4 book ai didi

c - 为什么 gdb "set"命令不能识别全局变量,必须添加 "::"或 "variable"?

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:03 24 4
gpt4 key购买 nike

我试图在 gdb 中设置值,我有:

int i=0;
int main(){
++i;
int j=i+2;
return 0;
}

在“return”和“r”处中断

(gdb) set j=4
(gdb) set i=5
Ambiguous set command "i=5": .
(gdb) set ::i=6
(gdb) set variable i=6

很奇怪,“j”是main中的局部变量,所以“设置”没有问题。虽然“i”是全局的,但似乎我应该添加“::”或“variable”来设置它。

我在网上搜索了一下,它说“变量”用于设置在调试 session 中使用的 gdb/reg 变量。

为什么“i”还需要“variable”?

最佳答案

你的例子是:

(gdb) set i=5
Ambiguous set command "i=5": .

这不是名称查找错误,而是 gdb 如何解析命令的结果。 (尾随的 : . 看起来应该有什么意思,或者列出什么;但它看起来很奇怪。)

set可用于评估表达式,正如您在 set j = 4 中发现的那样-- 但这只是因为没有以 set j 开头的 gdb 命令.

set首先尝试任何匹配的子命令,识别缩写。并且由于有多个命令以 set i 开头(比如 set inferior-ttyset input-radix ,...),gdb 不知道该选择哪个。因此,它提示命令不明确。

设置变量的真正命令是set variable ,这就是最后一次尝试成功的原因。

请注意,其他采用表达式的命令也可以评估赋值。我倾向于使用 p (又名 print )交互而不是 set variable只是因为它更短。

关于c - 为什么 gdb "set"命令不能识别全局变量,必须添加 "::"或 "variable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40167378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com