c++ - 使用 Xcode 7 GUI (lldb) 调试 C++ 库源代码

标签 c++ xcode debugging static-libraries lldb

我在 Xcode 中使用通过 cmake 安装的库,我希望我的调试器在调试我的应用程序时单步执行该库的代码。

在构建并安装依赖项 cmake 项目后,依赖它的 cmake 项目将包含该项目。当它运行时,我想使用 Xcode 调试器单步执行依赖库的代码。

有没有办法告诉我的主应用程序的 Xcode 库的头文件、源代码和调试构建的二进制文件(如果需要)在哪里,以便我可以单步执行?

我发现了一些相关的问题,但没有一个提供直接的说明来配置你的库的源代码,以便在 GUI 的支持下在 Xcode 中找到。

这是一个 example homebrew formula它安装一个 cmake 项目并启用调试符号。如果需要,我也可以想出一个使用该库的示例。

最佳答案

如果您将库的调试版本链接到您的应用程序中,并且您没有移动或删除用于构建它的 .o 文件或这些 .o 文件的源文件,那么您不应该必须做任何事情。 lldb 将从加载程序中获取库二进制文件的位置,并且将有一个指向 .o 文件的“调试映射”(在 OS X 上,存储实际调试信息的位置),然后 lldb 将读取该文件,调试信息将包含源文件的路径。

因此,如果您在库中的某些代码中停止时没有在 Xcode 中看到源代码,则此链的某些部分一定已损坏。

首先确保您确实在构建库的调试版本(构建 .o 文件的编译行应该包含 -g。)

接下来,如果您的 make 进程在安装之前删除 .o 文件或剥离库,则 lldb 将无法从二进制文件跟踪到调试信息。解决此问题的最简单方法是使用 dsymutil 实用程序将 dSYM 作为构建过程的一部分,并将 dSYM 安装在 lldb 可以找到的位置(在库旁边,或在 Spotlight 搜索的任何位置)或使用 lldb 显式添加它添加-dsym 命令。请注意,如果库被剥离,您需要在它被剥离之前制作 dSYM。

最后,如果您要将源文件从构建时所在的位置移动,那么您可以使用第一个链接中描述的源映射。

关于c++ - 使用 Xcode 7 GUI (lldb) 调试 C++ 库源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959192/

相关文章:

c++ - Cin 没有操作数 >>

c++ - 演绎指南和可变参数模板

ios - 我想从不同的 uiviewController 返回选项卡 ViewController 的特定页面

objective-c - cocoa QTMovieView keydown 不起作用

ios - 加速框架中的 vfp.h 在 XCode 4.0.2 上没有链接

visual-c++ - Visual C++ 调试器和 BoundsChecker 之谜

visual-studio-2008 - 将一个断点的命中计数用于另一个断点的条件

c++ - 使用前一个节点的地址删除节点

c++ - 如何从用户输入值并保存在变量wxDev-C++中

java - 如何在 Eclipse Debug模式下保持突出显示已执行的 Java 行?