为lldb启用调试工具
Enable debug-tools for lldb
我在使用clang++在MacOsX上使用lldb进行调试时遇到问题。我使用makefile在C++中编译项目,我不知道是否必须在编译命令中启用调试选项。
这是我的makefile 的摘录
FLAGS =-g -Wall -O0
[...]
clang++ $(FLAGS) $^ -o $@
当我尝试用makefile的这个配置运行lldb时,它会返回一个错误:
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
我想我必须在我的makefile上启用调试工具,但我还没有找到如何在互联网上做到这一点。我尝试了-g
和-ggdb
选项,但没有成功。
然而,当我尝试以不同的方式设置断点时,它是有效的(但在特定动作上设置断点对我不感兴趣…):
breakpoint set -n fonction
Breakpoint 1: [...]
我没能在网上找到答案,所以我很想得到一些帮助!非常感谢。
看起来调试信息正在丢失。一种可能性是,在构建您关心的.o文件之前,您的CFLAGS会被重置,因此.o文件没有调试信息。一个简单的检查方法是运行
$ otool -l my_file.o | grep debug_info
sectname __debug_info
如果您没有看到"sectname"输出,那么您的.o文件就没有调试信息。
运行makefile,查看my_file.c的构建行,并确保确实传递了-g
选项。-ggdb
实际上并没有为clang做任何特别的事情,所以-g
就是你所需要的。。。
如果.o文件包含调试信息,那么在构建最终二进制文件时,它一定会丢失。
MacOSX在处理调试信息方面有点滑稽。它不将调试信息写入最终映像,而是将"调试映射"写入可执行文件,并将调试信息保留在.o文件中。当您剥离二进制文件时,该调试映射会被剥离,因此如果您剥离可执行文件,将删除指向调试信息的链接。当然,如果在构建后删除了.o文件,也会删除调试信息。
我终于安装了gdb,并且调试正常。但在阅读了你的帖子后,你让我意识到我可能在编译时删除了.o。我没有想过,因为lldb在某些情况下(在特定的函数上)可以设置断点,但在其他情况下(特定的行上)则不能。
由于我正在使用makefile,我忘记了在编译后删除所有.o的自动删除,我认为这可能会导致问题。现在,如果我让.o,那就完美了。但这让我非常惊讶,因为我的makefile和我的同事是一样的,他能够使用gdb进行调试而没有任何问题。
非常感谢您提供的所有信息。
- Android Studio-在现有的旧项目中启用本机C++调试(card.io Android Source)
- 提升堆元素句柄比较和 MSVC 迭代器调试工具
- 无法为 QOpenGLWidget 启用调试上下文
- 启用 MSVC 调试迭代器时堆栈分配器访问冲突
- 即使Visual Studio 14 2015 Win64工具链已启用,也将32位工具链用于编译
- 为调试版本启用仅标头库的优化
- 启用RTTI进行叮当工具
- 在VS2010中启用跨项目调试
- 为lldb启用调试工具
- 在系统C中启用调试
- Visual studio调试工具提示-隐藏变量
- 如何为Visual Studio 2012调试器编写自定义本机可视化工具DLL
- 在VS C++ 6.0中,哪些调试工具适合查找内存泄漏的位置
- 在VS2010调试模式下启用多核编译
- 如何编写一个非常简单的Visual Studio调试器可视化工具
- 是否有类似Valgrind Memcheck的工具,用于在没有错误后进行调试使用
- 没有调试工具的调试技术
- 调试工具跟踪程序中所有STL容器的大小
- QMAKE*.pro文件:在发布模式下启用调试信息
- "MATLAB style"计算机视觉\图像处理可视化\调试工具