首页 > 解决方案 > 如何使 LLDB 在 MacOS 上的 CLion 中与 STL 一起工作,正如我在 Linux 上所期望的那样

问题描述

我想要完成的是在 CLion 中轻松调试 C++ 代码,就像在 Linux 上一样。我将使用以下代码进一步说明:

set<int> time;
time.insert(1);
size_t qq = time.size();

我附上了我使用 Bundled LLDB 和 GDB 调试器(附件lldbgdb分别)的屏幕截图。

预期的 gdb

数据库

数据库

由于 Apple 放弃了对 GDB 的支持,我不得不安装 8.0.1 版,对其进行代码设计,等等以使其正常工作。我期待我在 Linxu 机器(带有捆绑的 GDB)上得到的行为(expected分别是附件)。我真的很想能够看到我的集合的大小!

如附件所示,macOS 上的 LLDB 和 GDB都存在此问题(尽管在 Linux 上没有问题)。我决定尝试为 macOS 获取 GDB,只是因为 LLDB 调试器没有按预期工作,我希望它是一个特定于调试器的问题。lldbgdb

标签: c++macosgdbclionlldb

解决方案


调用 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 方法。


推荐阅读