lldb C局部变量不打印

lldb C local variable not printing

Value eval(Value arg, Table env) {
if (arg.tag == ConsCell) {
    Value operator = car(arg);
    Value operands = cdr(arg); // <- debugger stopped here

如果我用 p arg 打印参数 arg,我得到:

(lldb) p arg
(Value) [=11=] = {
  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 时出了什么问题?

lldb 在 C++ 和 Objective-C 的混合体中评估表达式。 operator,你的变量名,是C++中的保留关键字。当您使用 p 命令(它是 expression 命令的别名)时,lldb 将您的表达式传递给 clang 以在 C++/Objective-C 中解析和评估(或者,如果您正在调试Swift 方法,在 Swift 中解析和求值)。即使您的程序是直接用 C 编写的,您的表达式也会被计算为 C++ 表达式,这不是有效的 C++ 表达式。

frame variable(简称fr v)不通过编译器进行评估,它尝试对提供的变量路径进行简单解析。它可以对指针进行简单的取消引用和跟踪,但不能强制转换值。