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
}
时会出现什么问题?
答案 0 :(得分:5)
lldb评估C ++和Objective-C的混合中的表达式。 operator
,变量的名称,是C ++中的保留关键字。当您使用p
命令(它是expression
命令的别名)时,lldb将您的表达式传递给clang以解析并在C ++ / Objective-C中进行求值(或者,如果您正在调试Swift方法,在Swift中解析和评估)。即使您的程序是用直接C编写的,您的表达式也会被评估为C ++表达式,而且它们不是有效的C ++表达式。
frame variable
(简称fr v
)不会通过编译器进行评估,它会尝试对提供的变量路径进行简单的解析。它可以执行简单的解引用和跟随指针,但它不能转换值。例如。