首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >11 not局部变量不打印

11 not局部变量不打印
EN

Stack Overflow用户
提问于 2015-07-15 04:16:34
回答 1查看 972关注 0票数 4
代码语言:javascript
复制
Value eval(Value arg, Table env) {
if (arg.tag == ConsCell) {
    Value operator = car(arg);
    Value operands = cdr(arg); // <- debugger stopped here

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

代码语言:javascript
复制
(lldb) p arg
(Value) $0 = {
  data = {
    number = 1068272
    list = 0x0000000100104cf0
    symbol = 0x0000000100104cf0 "?L\x10"
  }
  tag = ConsCell
}

但如果是p operator,我会得到:

代码语言:javascript
复制
(lldb) p operator
error: expected a type
error: 1 errors parsing expression

但是,使用frame variable operator是可行的:

代码语言:javascript
复制
(lldb) frame variable operator
(Value) operator = {
  data = {
  number = 1068208
  list = 0x0000000100104cb0
  symbol = 0x0000000100104cb0 "\x10L\x10"
}
  tag = ConsCell
}

当我使用p operator时出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-15 08:23:34

在C++和Objective的杂交中评价lldb的表达。operator,您的变量的名称,是C++中的保留关键字。当您使用p命令(它是expression命令的别名)时,lldb将表达式传递给clang,以便在C++/Objective中解析和计算(或者,如果您正在调试Swift方法,则在Swift中解析和计算)。即使您的程序是用纯C编写的,但您的表达式被计算为C++表达式,这不是一个有效的C++表达式。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31421400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档