LLDB不能在调试代码打印值

问题描述:

当打印在LLDB的值,我得到了以下错误LLDB不能在调试代码打印值

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

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

$__lldb_local_vars对于lngb的表达式解析器中的clang提供的名称查找示例中的一些问题有点麻烦。 hack尝试通过将局部变量注入名称空间然后导入到表达式中,将局部变量提升到名称查找的头部(在本地可见的类和名称空间查找之前)。这有一些性能问题,并且它也很脆弱,因为它需要实现所有可见的本地人。我们做了一大堆工作来删除我们可以告诉我们无法实现的本地人,但它仍然不能很可靠地工作。

这个技巧是默认关闭所有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 bug报告者:https://bugs.llvm.org提交错误会很有帮助。

+0

是这种bug修复了最新的lldb吗? –

+0

不,我们还没有想出一个更好的方式来告诉当地人的铿锵声。我们必须做一些基础工作,首先清理lldb表达式解析器和clang之间的接口,但它尚未诞生。 –

+0

在我的情况下,二进制文件是由gcc编译而不是铛声。 lldb是否支持由gcc构建的调试代码? –