为什么LLDB';s打印(或p)命令如此有限? 当我第一次听到它时,听起来就像是一个伟大的特性——C++ + RePL。但是,它不能调用STL函数或方法,并且还有很多其他问题。这个问题也适用于条件断点

为什么LLDB';s打印(或p)命令如此有限? 当我第一次听到它时,听起来就像是一个伟大的特性——C++ + RePL。但是,它不能调用STL函数或方法,并且还有很多其他问题。这个问题也适用于条件断点,c++,lldb,C++,Lldb,它仍然是一个实验性的特性,还是开发人员刚刚放弃了它 例如: (lldb)p迭代器->外地 错误:调用目标中不存在的函数“std::::。”wrap_iter::operator->()const'(“ZNKSt3_u111_uwrap_iterIPK8aClassEptEv”) 错误:0分析表达式时出错 错误:表达式无法准备在目标中运行 目前,调试器没有好的方法来生成模板专门化的方法,编译器只为这些方法发出内联版本。调试器无法调用内联方法 这里有一个有限的技巧(尽管它需要C++11),可以用来强

它仍然是一个实验性的特性,还是开发人员刚刚放弃了它

例如:

(lldb)p迭代器->外地
错误:调用目标中不存在的函数“std::::。”wrap_iter::operator->()const'(“ZNKSt3_u111_uwrap_iterIPK8aClassEptEv”)
错误:0分析表达式时出错
错误:表达式无法准备在目标中运行

目前,调试器没有好的方法来生成模板专门化的方法,编译器只为这些方法发出内联版本。调试器无法调用内联方法

这里有一个有限的技巧(尽管它需要C++11),可以用来强制编译器生成相关模板类的完整副本,以便调试器可以调用一些函数。例如,如果我把:

template class std::vector<int>;
模板类std::vector;
在我的源代码中,编译器将生成std::vector的int专门化中所有函数的真实副本。这显然不是一个完整的解决方案,您应该只在调试版本中这样做,否则会使代码膨胀。但是当有两种类型是你真正调用方法的时候,这是一个有用的技巧


你提到了“许多其他问题”。请使用lldb bugzilla:,或Apple的bug reporter:,将在lldb中发现的任何表达式解析器问题的bug归档。表达式解析器正在积极开发中

是不是编译器已经内联了
运算符->
函数?@TheParamagneticCroissant这与什么有关系?如果函数是内联的,并且不存在于可执行文件中,调试器几乎没有机会调用它。难道它不能(至少)动态地解释来自模板的代码吗?(至少最终;如果这是一个实验性功能,他们可能还没有时间这么做)“难道它不能(至少)动态地解释来自模板的代码吗?”——嗯……不。