Iphone &引用;程序接收信号:EXC“坏访问”如何识别触发此操作的线路?

Iphone &引用;程序接收信号:EXC“坏访问”如何识别触发此操作的线路?,iphone,xcode,debugging,ios,exc-bad-access,Iphone,Xcode,Debugging,Ios,Exc Bad Access,我怎样才能最容易地在代码中找到触发此(即“程序接收信号:EXC_BAD_访问”)的点 当我得到这个,我在控制台中看,我没有看到任何额外的信息,如在这种情况下的堆栈跟踪。我知道我可以在代码中设置断点并尝试单步查找,但是如果有一种方法可以在没有大量断点的情况下更容易地找到断点并单步查找,那就太好了 编辑1-重新输入backtrace(重新输入这个答案),我看到了,这似乎没有突出我代码中的要点 (gdb) backtrace #0 0x00fd7a63 in objc_msgSend () #1

我怎样才能最容易地在代码中找到触发此(即“程序接收信号:EXC_BAD_访问”)的点

当我得到这个,我在控制台中看,我没有看到任何额外的信息,如在这种情况下的堆栈跟踪。我知道我可以在代码中设置断点并尝试单步查找,但是如果有一种方法可以在没有大量断点的情况下更容易地找到断点并单步查找,那就太好了

编辑1-重新输入backtrace(重新输入这个答案),我看到了,这似乎没有突出我代码中的要点

(gdb) backtrace
#0  0x00fd7a63 in objc_msgSend ()
#1  0x06019780 in ?? ()
#2  0x0046cf16 in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] ()
#3  0x0046a9e7 in -[UITableViewRowData numberOfRows] ()
#4  0x003218c2 in -[UITableView noteNumberOfRowsChanged] ()
#5  0x0032e2b8 in -[UITableView reloadData] ()
#6  0x0032b470 in -[UITableView layoutSubviews] ()
#7  0x01d33451 in -[CALayer layoutSublayers] ()
#8  0x01d3317c in CALayerLayoutIfNeeded ()
#9  0x01d2c37c in CA::Context::commit_transaction ()
#10 0x01d2c0d0 in CA::Transaction::commit ()
#11 0x01d5c7d5 in CA::Transaction::observer_callback ()
#12 0x00e56fbb in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#13 0x00dec0e7 in __CFRunLoopDoObservers ()
#14 0x00db4bd7 in __CFRunLoopRun ()
#15 0x00db4240 in CFRunLoopRunSpecific ()
#16 0x00db4161 in CFRunLoopRunInMode ()
#17 0x017aa268 in GSEventRunModal ()
#18 0x017aa32d in GSEventRun ()
#19 0x002c342e in UIApplicationMain ()

尝试在仪器中使用NSZombies。有一个关于如何使用它的苹果WWDC视频。这将有助于您确定它的来源。

使用GDB的backtrace命令(在控制台中键入“backtrace”)。这将打印出整个堆栈,直到崩溃


NSZombieEnabled很可能会帮助您找到大多数过度发布的bug。发件人:

在Xcode中使用:双击 您的Xcode项目。单击参数选项卡。在“待处理变量”中 在环境中设置:“部分,创建一个名为 “NSZombieEnabled”并将其值设置为“YES”


对于特别恶劣的情况(在我的例子中是一个严重的over autorelease错误),一些额外的标志,如NSDebugEnabled、MallocStackLogging和mallocstacklogginnocompact,将帮助您检查任何变量的保留/释放历史。关于如何使用它们的教程可以在这里找到

您可以做一些事情来解决跟踪内存问题

  • 在某些情况下,可以使用调试器。命令+Shift+Y

  • 您可以使用
    NSZombieEnabled

  • 您可以使用
    Build
    菜单中的“构建和分析”


  • 这很简单:僵尸。棘手的是西格布(嗨,Matt-我在我的帖子中添加了一条关于这个问题的评论-它仍然没有完全指出我的代码中与这个问题相关的要点?好吧,我认为你没有任何堆栈跟踪,不是一个模棱两可的跟踪。在这种情况下,正如其他评论者所建议的,NSZombies应该帮助你跟踪这个问题。你释放了一个对象太多了mewhere和NSZombies可以帮你找到位置。谢谢你帮了我一点忙-我得到了以下信息-我不认为它告诉了我们代码中的确切位置?(虽然额外的信息帮助我猜测它会在哪里)。下面是我看到的:“2011-02-28 10:53:48.595 myApp[99384:207]***-[\uu NSArrayM count]:消息已发送到解除分配的实例0x5b26150”。因此我猜可能是numberOfRowsInSection方法。。。