包含动态类的STL容器的LLDB C++调试 我在XCODE上写C++,唯一的选择是LLDB。我定义了一个类型为 std::list<State> states;

包含动态类的STL容器的LLDB C++调试 我在XCODE上写C++,唯一的选择是LLDB。我定义了一个类型为 std::list<State> states;,c++,xcode5,lldb,C++,Xcode5,Lldb,该类是一个自定义类。我试着使用expr命令和frame变量,但它们帮不上忙 expr的结果是 错误:无法具体化结构:变量状态24的大小与ValueObject的大小0不一致 帧变量的结果是 该变量已在程序中的这一点上进行了优化。来自expr/p的错误消息有点不幸——树的顶部有一个变化,应该允许发出真正的错误——但是行为是正确的。帧变量输出是正确的错误消息 你总能做到 (lldb) image lookup -v -a $pc 查看程序中某一点上所有可见变量的位置。它们以矮表达式的形式表示,矮表

该类是一个自定义类。我试着使用expr命令和frame变量,但它们帮不上忙

expr的结果是

错误:无法具体化结构:变量状态24的大小与ValueObject的大小0不一致

帧变量的结果是


该变量已在程序中的这一点上进行了优化。来自expr/p的错误消息有点不幸——树的顶部有一个变化,应该允许发出真正的错误——但是行为是正确的。帧变量输出是正确的错误消息

你总能做到

(lldb) image lookup -v -a $pc
查看程序中某一点上所有可见变量的位置。它们以矮表达式的形式表示,矮表达式通常以帧基址寄存器DW_OP_fbreg表示,例如x86_64上的rbp


如果变量的位置=字段为空,则表示变量的值在此pc位置不可用。

谢谢。但是我不熟悉lldb,我怎么能在我的示例中看到状态的内容呢?这不是lldb的问题-此时没有调试器可以向您显示变量的内容。你的程序是用优化构建的吗?在调试优化时尝试禁用优化。当代码被优化时,变量通常可以在您希望它们可用的地方被消除。。。或者它们可能是可用的,但编译器的调试信息没有描述如何找到它们。我禁用了代码生成的优化,但仍然不起作用。expr只在第一次分配状态后才工作,但当我第一次推回状态时,它停止工作。有什么方法可以查看州的内容吗?你知道,在VisualStudio中,我当然可以尽可能地看到每个变量的内容。谢谢。我试过你的方法,但似乎将优化级别设置为“无”没有什么不同。有没有其他办法可以帮上忙?非常感谢。@jasony你不必相信我的话。在Xcode中将构建设置更改为DWARF+dSYM,重新构建项目,然后在.app捆绑包旁边是一个.app.dSYM捆绑包。在那上面运行侏儒泵。在文本中查找函数的名称。然后在文本中找到变量的名称。您将在函数中看到地址范围列表,以及该变量在每个范围中的位置。如果在定义loc的某个范围内停止,lldb将显示该值。否则,lldb将不会。这都是关于编译器的调试信息。它与lldb无关。在调试lldb时,有没有办法查看状态的内容@JasonMolendaI做了更多的实验。如果我将状态类型从std::list更改为std::list,则一切正常。所以lldb不知道我的自定义类。
(lldb) image lookup -v -a $pc