我试图在gdb中设置值,我有:
int i=0;
int main(){
++i;
int j=i+2;
return 0;
}
休息"返回"和" 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中的局部变量,所以" set"没有问题。 虽然"我"是一个全球性的,似乎我应该添加" ::"或"变量"设定它。
我搜索了互联网,它说"变量"用于设置调试sesssion中使用的gdb / reg变量。
为什么"我"仍需要"变量"?
答案 0 :(得分:2)
你的例子是:
(gdb) set i=5
Ambiguous set command "i=5": .
这不是名称查找错误,而是gdb如何解析命令的结果。 (尾随: .
看起来应该意味着什么,或列出一些东西;但它似乎很奇怪。)
set
中发现的那样, set j = 4
可用于评估表达式 - 但这只是因为没有以set j
开头的gdb命令而发生。
也就是说,set
首先尝试任何匹配的子命令,识别缩写。由于有多个命令从set i
开始(例如set inferior-tty
,set input-radix
,...),因此gdb不知道选择哪个。所以,它抱怨命令不明确。
设置变量的真正命令是set variable
,这就是最后一次尝试的原因。
请注意,采用表达式的其他命令也可以评估赋值。我倾向于使用p
(又名print
)而不是set variable
,因为它更短。