为什么LLDB的打印(或p)命令如此有限?
Why is LLDB's print (or p) command so limited?
当我第一次听说它时,它听起来像一个很棒的特性——c++ REPL。然而,它不能调用STL函数或方法,并且有很多其他问题。这个问题也适用于条件断点。
它仍然是一个实验功能,还是开发者已经放弃了它?
的例子:
(lldb) p iterator->aField
error: call to a function 'std::__1::__wrap_iter<aClass const*>::operator->() const' ('_ZNKSt3__111__wrap_iterIPK8aClassEptEv') that is not present in the target
error: 0 errors parsing expression
error: The expression could not be prepared to run in the target
目前,调试器还没有好的方法来生成编译器只发出内联版本的模板专门化方法。调试器不能调用内联方法。
这里有一个有限的技巧(尽管它需要c++ 11),您可以使用它来强制编译器生成相关模板类的完整副本,以便调试器可以调用函数。例如,如果我输入:
template class std::vector<int>;
在我的源代码中的某个地方,编译器将生成std::vector的int专门化中所有函数的真实副本。这显然不是一个完整的解决方案,您应该只在调试构建中这样做,否则它将使您的代码膨胀。但是当有几个类型需要调用方法时,这是一个很有用的技巧。
你提到了"一大堆其他问题"。请在lldb中发现的任何表达式解析器问题上提交错误,可以使用lldb bugzilla: https://llvm.org/bugs或Apple的错误报告器:http://bugreporter.apple.com。表达式解析器正在积极开发中
相关文章:
- 从命令行c++发送文本文件名
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 使用QProcess执行命令,并将结果存储在QStringList中
- 数组长度,为什么从命令行获取时不能使用它?
- 如何让LLDB在成功时退出,在失败时等待
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- clang整洁10忽略了我的NOLINT命令
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 如何使用ESP8266向谷歌主页发送命令
- LLDB:实现接受用户输入的自定义命令
- 如何在LLDB中编辑命令行
- 在 gdb 中,我按 tab 后,它可以完成我的命令以及局部变量,但为什么 lldb 不能
- 如何在命令行lldb中显示CGAL异常
- 为什么LLDB的打印(或p)命令如此有限?
- 如何在lldb命令行中调用c++对象的公共函数