如何让 UIAutomation、模拟器和 Xcode 调试器同时运行?

Posted

技术标签:

【中文标题】如何让 UIAutomation、模拟器和 Xcode 调试器同时运行?【英文标题】:How to get UIAutomation, Simulator, and Xcode Debugger Running at the same time? 【发布时间】:2010-12-17 15:50:09 【问题描述】:

谁能告诉我有关如何使 Instruments 运行 UIAutomation 脚本并使用在模拟器中运行的调试器启动 iPhone 应用程序的文档?

约束: 我只有 iPhone 3g 硬件来测试和调试 UIAutomation 的设备只是不能可靠地工作。 通常测试脚本只是运行以确保一切通过,但现在存在一个奇怪的错误,只有在 UIAutomation 脚本运行时才会触发(这是一件好事)。该错误不能在手动操作中重复。 似乎没有办法将 Instruments UIAutomation 附加到已经在模拟器中运行的进程。没有选择。 直接启动 Instruments UIAutomation 不会导致它与调试器一起启动。

我假设可以在 Instruments 编辑活动目标(环境变量、参数、工作目录)中配置一些命令行魔法来实现这一点,但我没有找到魔法段落。

谢谢, 尼尔

【问题讨论】:

【参考方案1】:

这已经让我暂停了一段时间 - 特别是因为选择自动化仪器时,仪器应用程序明确地说明了Current instrumentation disallows attach。关键是要意识到在模拟器中运行的应用程序在您的主机系统中作为自己的进程可见,因此直接从 GDB 附加效果很好。这些说明适用于 Snow Leopard 10.6.8 上的 XCode 4.2 (4C199):

    在 Instruments 中以您通常的方式开始测试(直接从 Instruments 或从 Xcode 4 的 Product -> Profile 开始。选择任何模板和脚本来进行自动化测试。

    返回 Xcode,在菜单 Product -> Attach to Process 下,您应该会看到按名称列出的 ios 应用程序,以及主机上的所有其他应用程序。事实上,它很可能会被列在最前面,在部分标题Likely Targets 下。

    如果不可见,请选择View -> Debug Area -> Show Debug Area,以便您可以看到 gdb 控制台。

    点击暂停按钮 (Product -> Debug -> Pause) 中断您的程序。像往常一样设置断点、检查。

那么下一个问题是:为什么我在调试器控制台中看不到我正常的NSLog() 输出? 您的应用程序已经将自身绑定到控制台输出流,因此查找其输出的最简单位置是在 OS X 控制台应用程序 (/Applications/Utilities/Console.app) 中查看DATABASE SEARCHES -> All Messages

【讨论】:

这太棒了!谢谢你这个ckhan!

以上是关于如何让 UIAutomation、模拟器和 Xcode 调试器同时运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 模拟器中工作的 UIAutomation 中获取 captureScreenWithName?

如何使用 Xcode 机器人在模拟器上运行 UIAutomation

iOS/UIAutomation:如何将 isVisible() 用于第二个未标记工具栏中的按钮?

UIAutomation dragInsideWithOptions 对 iOS 7 模拟器没有影响

使用 UIAutomation 的仪器出现意外错误

如何使用 Instruments UIAutomation 测试 iOS Web 应用程序