2011-04-08 100 views
2

我怎么能在Objective-C调试应用程序的iPhone时,Xcode如何调试iPhone应用程序

我的意思是好的,Xcode和调试模式是好的,但是当 BAD_ACCES我的应用程序崩溃(或不便。smilliar)我只是得到了跟踪到程序集

当我调试C + +和可以说要访问一个无效的指针,我得到的一行代码的地方一切都崩溃的跟踪...在这里我只是得到一个跟踪许多内部功能在组装,所以我没有线索什么,哪里出了问题

可能有些释放/保留问题lem,但我怎么知道?

谢谢

+0

您是否尝试过构建和分析?虽然它不是实时调试,但它应该可以帮助您找到泄漏和释放的途径。 – Twelve47 2011-04-08 09:22:22

回答

1

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

4

在这里,我们一起去了完整的答案:

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

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

我刚刚限制了我的带宽,看看这些错误是否连接到http请求。查看[限制Mac上的带宽] [1]以设置慢速连接。我将它设置为5KBytes /秒。

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

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

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

解决方案问题1 这个问题很容易解决,因为webview并未在dealloc中发布。也建议将代表设置为无对象,但在这种情况下不需要。

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

第二误差

栈跟踪示出了

CLLocationManager onClientEventLocation: 

解错误

同误差1,设置代表为nil并释放的LocationManager。


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

转到项目 - >编辑活动Executable->参数选项卡 通过点击+

Name:NSZombieEnabled 
Value:YES 

这将尝试解决内存地址为坏过剩错误的类名添加变量在下面的窗口。

要了解内存泄漏情况,请打开Run-> Run with performance tool-> Leaks。这将打开仪器,这是一个明智的工具,发现泄漏。

+0

是的,但在堆栈跟踪中,我收到了一堆内部电话,而我自己也没有 – 2011-04-08 09:25:29

+0

您可以发布stacktrace的屏幕截图吗?可能有线索,是的,不是每一行都可以跳到你的代码,因为它是Apple的代码,并且没有打开。 – 2011-04-08 09:26:55

+0

这是http://img69.imageshack.us/i/debugb.png/ – 2011-04-08 17:38:33