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
)不通过编译器进行评估,它尝试对提供的变量路径进行简单解析。它可以对指针进行简单的取消引用和跟踪,但不能强制转换值。
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
)不通过编译器进行评估,它尝试对提供的变量路径进行简单解析。它可以对指针进行简单的取消引用和跟踪,但不能强制转换值。