lldb C局部变量不打印

sti*_*ist 4 c llvm-clang lldb

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

如果我打印的说法argp arg,我得到:

(lldb) p arg
(Value) $0 = {
  data = {
    number = 1068272
    list = 0x0000000100104cf0
    symbol = 0x0000000100104cf0 "?L\x10"
  }
  tag = ConsCell
}
Run Code Online (Sandbox Code Playgroud)

但如果p operator,我得到:

(lldb) p operator
error: expected a type
error: 1 errors parsing expression
Run Code Online (Sandbox Code Playgroud)

但是,使用frame variable operator作品:

(lldb) frame variable operator
(Value) operator = {
  data = {
  number = 1068208
  list = 0x0000000100104cb0
  symbol = 0x0000000100104cb0 "\x10L\x10"
}
  tag = ConsCell
}
Run Code Online (Sandbox Code Playgroud)

我用的时候出了什么问题p operator

Jas*_*nda 5

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

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