从 Instruments 运行时程序不工作

Posted

技术标签:

【中文标题】从 Instruments 运行时程序不工作【英文标题】:Program not working when running from Instruments 【发布时间】:2010-06-22 13:19:02 【问题描述】:

当我使用仪器在模拟器中运行我的应用程序时,仪器报告了一堆泄漏。报告的泄漏对我来说没有多大意义,所以我想试试这个设备。但是当我从仪器开始时,它要么没有反应(它对触摸没有反应,我只能按 home 退出)或者甚至没有启动,只是在 iphone 上可以看到黑屏。没有仪器,我的应用程序运行良好。有谁知道怎么回事?

更新1: 如果我单击它,我在附加到 uiSearchDisplayController 的应用程序中有一个 UISearchBar,程序会冻结。我只能关闭它。它应该在单击时显示一个自动完成表。如果从模拟器运行,当我单击搜索栏时,它确实会泄漏一些内存,但只是第一次,它来自于在 didFailWithError 和 connectionDidFinishLoading 委托方法中释放的 nsurlconnection alloc。 (我已经有一个关于这个问题的单独未回答的问题。)

UPDATE2:报告了其他一些泄漏,但我的程序中唯一的代码是对 UIApplicationMain(argc, argv, nil, nil); 的调用,这对于追踪它不是很有帮助。

【问题讨论】:

【参考方案1】:

不存在仅在模拟器中显示的泄漏之类的东西。如果它在模拟器中泄漏,它会在设备上泄漏,讨论结束。

您偶尔会看到由于工具插入的挂钩与您的代码有问题的部分交互而导致的任何分析工具崩溃。您所经历的很可能是某种失控的循环。

我建议在解决设备问题之前先解决模拟器上的问题。

【讨论】:

那么在我解决模拟器上的所有泄漏之前,是否不可能在 iphone 上使用仪器?没有偶尔的崩溃,在使用仪器和iphone时它永远不会工作,它只在使用仪器和模拟器时工作。 Crashing Instruments 是不寻常的,但确实会发生。您通常不必先在模拟器中修复。但是,这样做通常更容易。模拟器有更多的内存,而且很容易把钩子放进去。如果模拟器中的某些东西不起作用,它就不会在设备上起作用,那何必呢?自引用导致无限递归,即对象、对象图、方法、函数等,通常在一秒钟内调用自身数万次,从而导致失控循环。 Instruments 同样必须产生数千个钩子来跟踪并锁定它。 我不认为我有那种循环。我设法修复了一些泄漏,但如果从 iphone 运行,它仍然无法在仪器上工作。 如果您在 UIApplication main 中有泄漏,通常是由添加的库、框架等或损坏的资源(如音频文件或图像)引起的。在 Instruments 中,您可以检查堆栈以跟踪泄漏。 如果您添加了未针对 ARM 编译的库。它可能在模拟器(即 Intel)上运行,但在设备上崩溃。

以上是关于从 Instruments 运行时程序不工作的主要内容,如果未能解决你的问题,请参考以下文章

XCode Instruments 让我的应用程序崩溃

从 Instruments 读取内存分配结果

从命令行运行 Apple Instruments 抛出:模拟应用程序退出

Apple Instruments 在跟踪 iOS 分配时停止工作

Xcode Instruments 附加到进程

iOS Instruments:计时器的时间与调用树中的运行时间总和不匹配