lldb无法在调试代码中打印值

时间:2017-04-11 05:59:00

标签: lldb

在lldb中打印值时,出现以下错误

error: no member named 'rec' in namespace '$__lldb_local_vars'

我的代码是由-g编译的。为什么lldb无法打印值?

1 个答案:

答案 0 :(得分:9)

$__lldb_local_vars对于解决lldb表达式解析器的clang提供的名称查找功能上的一些问题有点麻烦。黑客试图通过将局部变量注入到命名空间中来将局部变量提升到名称查找的头部(在本地可见的类和命名空间查找之前),然后将其导入到表达式中。这有一些性能问题,它也很脆弱,因为它需要实现所有可见的本地。我们做了很多工作来删除我们可以告诉我们无法实现的本地人,但它仍然没有非常可靠地工作。

默认情况下,这个hack在Apple发布的所有lldb中都处于关闭状态,并通过设置来控制:

(lldb) set list target.experimental.inject-local-vars
  target.experimental.inject-local-vars -- If true, inject local variables explicitly into the
                                           expression text.  This will fix symbol resolution
                                           when there are name collisions between ivars and
                                           local variables.  But it can make expressions run
                                           much more slowly.

您可以使用settings show显示此设置的当前值,并使用settings set进行更改。

如果您可以提供显示此失败的示例,那么向llvm错误报告者提交错误会很有帮助:https://bugs.llvm.org