lldb C局部变量不打印

时间:2015-07-15 04:16:35

标签: c lldb llvm-clang

arr=( $(find . -name "*.tar.gz" -print0) )
for i in "${arr[@]}"; do
    # $i now holds each of the filenames output by find
    tar xvzf $i
    mv $i $i.suffix
    rm $i
    # etc., etc.
done

如果我用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 } 时会出现什么问题?

1 个答案:

答案 0 :(得分:5)

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

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