Xcode 4,断点在 Mac OS 命令行工具的单元测试中不起作用

Posted

技术标签:

【中文标题】Xcode 4,断点在 Mac OS 命令行工具的单元测试中不起作用【英文标题】:Xcode 4, breakpoints not working in unit tests for Mac OS command line tool 【发布时间】:2012-10-04 12:33:08 【问题描述】:

我在 Xcode 4.5 中有一个简单的 Mac OS X 命令行工具 项目。我从 Cocoa Unit Testing Bundle 模板中手动添加了一个单元测试目标(命令行工具模板没有 Include Unit Tests 开关)。问题:运行测试(产品 > 测试)时,我无法让调试器在断点处停止。

因为我在询问之前做了谷歌搜索,这些是我已经尝试/检查过的一些事情:

单元测试确实会运行(它们正确地失败,例如 STFail())。 顶部栏上的主 Breakpoints 开关已打开(关闭再打开无济于事)。 Build Configuration 在测试目标上设置为 Debug(调试器是 LLDB,更改为 GDB 没有帮助)。 调试一般工作。在主控制台应用程序中,目标断点被击中得很好,所以只有单元测试有问题。另外,我制作了一个包含单元测试的测试 ios 应用程序——应用程序和单元测试都很好。 构建设置看起来不错(让我知道是否还有其他我应该检查的): 生成调试符号 = 是 优化级别 = 无 [-O0](用于调试) 设置符号断点(在 -[NSException raise] 或 objc_exception_throw 上)没有帮助。 重新加载项目或重新启动 Xcode 没有帮助。

我还能做些什么来在单元测试中遇到断点?

【问题讨论】:

【参考方案1】:

检查单元测试目标的“构建后测试”构建设置(在“单元测试”下)。

如果此设置设置为“是”,那么在构建目标之后,测试将通过 Xcode“外部”的 shell 脚本执行,然后再通过 Xcode 执行。因此,如果在执行脚本时您的测试失败,那么第二次执行(“内部”Xcode)将不会发生,因此您的断点不会被命中。

-或-

如果您尝试调试的测试是失败的测试,则可能是您的 -setUp 方法发生了失败。如果您在 setUp 中使用 OCMock 并且忘记存根在设置期间碰巧调用的方法,则可能会发生这种情况。

【讨论】:

你的第二个建议对我来说是个问题。谢谢你。【参考方案2】:

我对 ios 应用程序的单元测试也陷入了类似的困境。在不同的位置使用新的代码副本为我解决了这个问题。

更新:有问题的状态似乎在项目/工作空间内的 xcuserdata 目录中。当我再次遇到它时,清除它解决了这个问题。但请注意,您将丢失所有之前的状态(例如,设置断点、打开的窗口等)

【讨论】:

以上是关于Xcode 4,断点在 Mac OS 命令行工具的单元测试中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

安装了 Xcode 命令行工具的 Mac OS X 中的 clang-format 和 clang-format.py 在哪里?

Mac OS Gatekeeper 阻止签名命令行工具

使用 Xcode 4.6 在 Mac OS X Lion (10.8.2) 上安装 OpenCV [关闭]

苹果mac os怎么用命令行终端打开app应用程序

使用 OS X El Capitan 安装 xcode 命令行工具

mac os,xcode