为什么 gdb "set" 命令不能识别全局变量,必须添加“::”或 "variable"?
Why gdb "set" command doesn't recognize global variable, must add "::" or "variable"?
我试图在 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中的局部变量,所以"set"没问题。
虽然 "i" 是全球性的,但我似乎应该添加“::”或 "variable" 来设置它。
我在网上搜索了一下,它说 "variable" 用于设置调试会话中使用的 gdb/reg 变量。
为什么 "i" 仍然需要 "variable"?
你的例子是:
(gdb) set i=5
Ambiguous set command "i=5": .
这不是名称查找错误,而是 gdb 解析命令的方式的结果。 (尾随的 : .
看起来应该有什么意思,或者列出什么;但它看起来很奇怪。)
set
可用于计算表达式,正如您在 set j = 4
中发现的那样——但这只是因为没有以 set j
.[=23 开头的 gdb 命令=]
也就是说,set
首先尝试任何匹配的子命令,识别缩写。而且由于有多个命令以 set i
开头(例如 set inferior-tty
、set input-radix
、...),gdb 不知道该选择哪个。因此,它抱怨命令不明确。
设置变量的真正命令是set variable
,这就是最后尝试成功的原因。
请注意,采用表达式的其他命令也可以评估赋值。我倾向于交互式地使用 p
(又名 print
)而不是 set variable
,因为它更短。
我试图在 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中的局部变量,所以"set"没问题。 虽然 "i" 是全球性的,但我似乎应该添加“::”或 "variable" 来设置它。
我在网上搜索了一下,它说 "variable" 用于设置调试会话中使用的 gdb/reg 变量。
为什么 "i" 仍然需要 "variable"?
你的例子是:
(gdb) set i=5
Ambiguous set command "i=5": .
这不是名称查找错误,而是 gdb 解析命令的方式的结果。 (尾随的 : .
看起来应该有什么意思,或者列出什么;但它看起来很奇怪。)
set
可用于计算表达式,正如您在 set j = 4
中发现的那样——但这只是因为没有以 set j
.[=23 开头的 gdb 命令=]
也就是说,set
首先尝试任何匹配的子命令,识别缩写。而且由于有多个命令以 set i
开头(例如 set inferior-tty
、set input-radix
、...),gdb 不知道该选择哪个。因此,它抱怨命令不明确。
设置变量的真正命令是set variable
,这就是最后尝试成功的原因。
请注意,采用表达式的其他命令也可以评估赋值。我倾向于交互式地使用 p
(又名 print
)而不是 set variable
,因为它更短。