c++ - 如何使 LLDB 在 MacOS 上的 CLion 中与 STL 一起工作,正如我在 Linux 上所期望的那样
问题描述
我想要完成的是在 CLion 中轻松调试 C++ 代码,就像在 Linux 上一样。我将使用以下代码进一步说明:
set<int> time;
time.insert(1);
size_t qq = time.size();
我附上了我使用 Bundled LLDB 和 GDB 调试器(附件lldb
和gdb
分别)的屏幕截图。
由于 Apple 放弃了对 GDB 的支持,我不得不安装 8.0.1 版,对其进行代码设计,等等以使其正常工作。我期待我在 Linxu 机器(带有捆绑的 GDB)上得到的行为(expected
分别是附件)。我真的很想能够看到我的集合的大小!
如附件所示,macOS 上的 LLDB 和 GDB都存在此问题(尽管在 Linux 上没有问题)。我决定尝试为 macOS 获取 GDB,只是因为 LLDB 调试器没有按预期工作,我希望它是一个特定于调试器的问题。lldb
gdb
解决方案
调用 vector::size() 的问题实际上不是调试器问题,而是 STL 的 clang 实现问题。此处讨论了此问题的另一个版本:
使用 Xcode/LLDB 打印/调试 libc++ STL
请注意,clang STL 的最新版本(Xcode 12 中的版本)对内联的攻击性要小得多。使用 Xcode 12,我可以运行expr my_vec.size()
等等expr my_vec[0]
,并且 lldb 确实有一个函数可以调用(并成功调用它!)
由于这是编译器和库的问题,因此您必须升级用于构建的工具才能获得此修复。
此外,如果您只将变量放在监视窗口中,而不是variable.size()
CLion 将打印变量摘要,即大小。如果您需要在 lldb 表达式中使用大小(将其传递给其他函数或测试它是否 > 5...),这将无济于事,但变量的摘要格式化程序将向您显示其大小并且这样做更有效而不是调用 size 方法。
推荐阅读
- google-app-maker - 重定向到外部 URL
- coffeescript - boostrap 上的单击事件选择操作框按钮(全选并取消选中)
- python - 我想使用 sed 命令将上面的行替换为 spring 数据源的下面的行
- vba - Word VBA:定位多个文本输入字段并更改 _Enter() 和 _AfterUpdate() 上的值
- python - 如何通过单击处理和 python 来填充随机形状?
- sql - 在 SQL Server 数据库的 1 个 BLOB 中存储多个 mp3 和 mp4 文件
- javascript - 将元素存储到对象中以用作单击处理程序无法正常工作(jQuery/javascript)
- eclipse - Spring Boot 无法识别对 kotlin 类的更改?
- c++ - “错误:'。'之前的预期主表达式 令牌”出现,我不知道为什么
- javascript - 在 bootstrap-4 中打开另一个时,手风琴不会缩回打开的部分