如何在依赖的Xcode项目中设置断点

14
我有一个 XCode 项目(我的主要 XCode 项目,其中包含可执行文件)。它依赖于几个其他项目(在详细视图的“项目”选项卡下,有几个其他的 XCode 项目依赖于它)。
我的问题是如何设置依赖项目代码中的断点?
我尝试了这个方法,但不起作用: 1. 打开我的主要 XCode 项目 2. 双击其中一个依赖的 XCode 项目 3. 在源目录中找到我想要中断的文件,并添加断点(通过单击编辑器边框的侧面,会出现一个蓝色的“书签”) 4. 回到“生成并运行”,我的应用程序确实运行了,但它从未在我在步骤#3中设置的断点处停止。
请问有人可以帮忙吗?我已经花了几天时间,但还是无法解决。
谢谢。

只要依赖项目已经构建,并且主项目链接到其生成的产品,你就是在正确的方式下完成了它。 - cdespinosa
7个回答

30

1) 在您的项目中添加断点

2) 进入xcode中的断点视图(在项目导航栏左上方),视图图标像一个断点图标

3) 右键单击所需的断点,选择“移动到” -> “用户”

如果断点位于“用户”项目下,则所有项目都可以访问它。


非常有用,谢谢。但我想知道:断点在“工作区”部分。难道不应该已经可以被工作区中的所有项目访问吗?事实是:它不能,但我想知道为什么? - Guian
谢谢你的回答!所有正在构建框架和在单独的项目中构建EndAPP(使用实际框架项目生成的.framework文件的应用程序)的人,都应该使用这种方法,这样调试会更容易。 - n devaraj

2
每当我在Xcode图形界面中设置断点遇到问题时,我都能够通过调试器命令行来完成(也就是说,在输出窗口中的“lldb”提示符)。例如,要在源文件“client.m”的第42行设置断点,请键入:
(lldb) b client.m:42

除了解决这个特定问题之外,命令行调试还比任何GUI提供更多的灵活性和可自动化性。一个好的起点是LLDB教程。(完全透明:我是unix和gdb的长期粉丝,所以这里有些偏见)。
当然,正如其他人提到的,确保库/依赖项目使用调试符号编译。希望这能有所帮助;祝你好运。

1
我会 echo Jon-Eric 的建议,并补充说,如果你习惯用 Cmd+Enter 运行项目,那么你应该考虑切换到 Cmd+Y 来每次启用 gdb。

0

确保在第4步中选择“构建和调试”。 “Go”有时意味着“运行”(断点禁用),有时意味着“调试”(断点启用)。

此外,在调试主项目时,请确保保持依赖项目处于打开状态。


0

我在使用Xcode时也遇到过类似的问题。对我来说解决方案是确保主项目中也有一个断点被触发(正如Kent在他的第三点中提到的)。但我不明白为什么这样会起作用。

当你打开一个项目时,你应该只在其中设置断点。如果你没有打开它们,它们可能会开始表现异常:即使你已经禁用或删除了它们,仍然停止执行流程,或者在你认为它们已启用时却无法工作。


0

这里有几个要点...(有些显而易见,有些则不然)

1) 确保依赖项目使用调试符号进行编译(我假设它是一个库)

2) 确保您的活动可执行文件链接到依赖库的调试版本

3) 在调用库入口点之前,在您的主项目中设置一个断点,并在库的入口点上设置一个断点...(除了您要命中的真正断点之外...)

我发现调试库的最佳方法是打开库项目,并将活动可执行文件设置为主项目,然后直接从库项目中点击“构建和调试”。

希望这能帮到你,祝你好运,玩得开心!


0
除了肯特的回复关于调试符号,还要检查主项目的构建设置中的COPY_PHASE_STRIP值,并确保在调试模式下将其设置为NO。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接