Value eval(Value arg, Table env) {
if (arg.tag == ConsCell) {
Value operator = car(arg);
Value operands = cdr(arg); // <- debugger stopped here如果我用arg打印参数p arg,就会得到:
(lldb) p arg
(Value) $0 = {
data = {
number = 1068272
list = 0x0000000100104cf0
symbol = 0x0000000100104cf0 "?L\x10"
}
tag = ConsCell
}但如果是p operator,我会得到:
(lldb) p operator
error: expected a type
error: 1 errors parsing expression但是,使用frame variable operator是可行的:
(lldb) frame variable operator
(Value) operator = {
data = {
number = 1068208
list = 0x0000000100104cb0
symbol = 0x0000000100104cb0 "\x10L\x10"
}
tag = ConsCell
}当我使用p operator时出了什么问题?
发布于 2015-07-15 08:23:34
在C++和Objective的杂交中评价lldb的表达。operator,您的变量的名称,是C++中的保留关键字。当您使用p命令(它是expression命令的别名)时,lldb将表达式传递给clang,以便在C++/Objective中解析和计算(或者,如果您正在调试Swift方法,则在Swift中解析和计算)。即使您的程序是用纯C编写的,但您的表达式被计算为C++表达式,这不是一个有效的C++表达式。
frame variable (简称fr v)不会通过编译器进行计算,它尝试对提供的变量路径进行简单的解析。它可以对指针进行简单的去引用和跟踪,但是它不能转换值。
https://stackoverflow.com/questions/31421400
复制相似问题