【问题标题】:How to debug iPhone applications如何调试 iPhone 应用程序
【发布时间】:2011-04-08 09:19:11
【问题描述】:

如何在 Objective-C、XCode 中为 iPhone 调试应用程序

我的意思是好的,XCode 和调试模式很好,但是当我的应用程序崩溃时 BAD_ACCES(或 smth.smilliar)我只是得到了装配的跟踪

当我在调试 C++ 并假设要访问无效指针时,我得到了对所有崩溃的代码行的跟踪...这里我只是对程序集中的许多内部函数进行跟踪,所以我没有线索哪里出了问题

可能是一些释放/保留问题,但我怎样才能找到?

谢谢

【问题讨论】:

  • 您是否尝试过构建和分析?虽然它不是实时调试,但它应该可以帮助您找到泄漏和过度释放的路线。

标签: iphone objective-c xcode debugging


【解决方案1】:

这里有完整的答案:

我查看了您的应用程序,我认为 UINavigationController 和异步 http 加载在两个地方的组合存在问题。启用僵尸确实揭示了这两个错误。我能够重现的第一个,第二个弹出几次,然后不再出现。

*** -[DetailViewController respondsToSelector:]: message sent to deallocated instance 0x56d6030
*** -[SearchViewController respondsToSelector:]: message sent to deallocated instance 0x56daa10

我刚刚限制了我的带宽以查看这些错误是否与 http 请求有关。查看 [Throttling Bandwidth On A Mac][1] 设置慢速连接。我将其设置为 5KBytes/秒。

如果您非常快速地查看详细信息,然后再次上两级并作为触发错误的最后一个操作:单击搜索,则会出现第一个错误。堆栈跟踪显示了一个

#2    0x004545b8 in -[UIWebView webView:decidePolicyForMIMEType:request:frame:decisionListener:]

并且有一些线程打开,所以查看下拉列表,有一个 webThread。显示该线程揭示了加载 detailPages url 的 web 视图正在发生的事情。这暗示 webiew 实际上已在单独的线程中完成加载,并且无法连接回 webview 本身 ​​[DetailViewController respondsToSelector:]。这很容易证明:删除 webview 请求的加载:我无法重现错误。

解决问题1 这个问题很容易解决,因为 webview 没有在 dealloc 中释放。还建议将委托设置为 nil 个对象,但在这种情况下不需要。

- (void)dealloc {
    webView.delegate = nil;
    [webView release];
}

第二个错误

stackTrace 显示了一个

 CLLocationManager onClientEventLocation:

解决方法错误

同错误1,将delegate设为nil并释放locationManager。


当您的应用程序崩溃时,您无法在左侧窗口中打开调试器,您可以看到堆栈跟踪。您可以双击任何将跳转到代码中正确位置的行(如果调用的方法是您的)。

转到项目->编辑活动可执行文件->参数选项卡 通过单击 +

在下部窗口中添加变量
Name:NSZombieEnabled 
Value:YES

这会尝试将内存地址解析为类名,以解决严重的过度错误。

要了解内存泄漏,请打开运行->使用性能工具运行->泄漏。这将打开仪器,这是查找泄漏的绝妙工具。

【讨论】:

  • 是的,但是在堆栈跟踪中我得到了一堆内部调用,而我自己一个都没有
  • 你能贴一张stacktrace的截图吗?可能有一个线索,是的,不是每一行都可以跳转到您的代码,因为它是 Apple 的代码并且未打开。
  • 这很有趣,你能提供一些代码什么时候发生这个错误吗?
  • 如果您将电子邮件地址提供给我,将通过电子邮件向您发送来源,并附上描述(它非常小)
  • 发送到 yanac dot de 的 nw
【解决方案2】:

您使用的是 XCode 3 吗?如果是这样,我强烈建议升级到 XCode 4。相比之下,XCode 4 中的调试器非常出色。它可以让您回过头来查看代码并查看导致崩溃的确切原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-18
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多