为什么gdb"设置"命令不识别全局变量,必须添加" ::"或"变量"?

时间:2016-10-21 02:23:07

标签: c variables gdb set global

我试图在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变量。

为什么"我"仍需要"变量"?

1 个答案:

答案 0 :(得分:2)

你的例子是:

(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,因为它更短。