"程序接收信号:EXC_BAD_ACCESS" - 如何识别触发该行的行?

Gre*_*reg 4 iphone debugging xcode exc-bad-access ios

我怎样才能最容易地找到我的代码中的点(即"程序接收信号:EXC_BAD_ACCESS")被触发?

当我得到这个并且我在控制台中查看时,我没有看到任何其他信息,例如在这种情况下的堆栈跟踪.我知道我可以通过代码放置断点并尝试逐步找到,但是如果有一种方法可以更容易找到没有大量断点并且逐步完成那将是很好的.

编辑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 ()
Run Code Online (Sandbox Code Playgroud)

ACB*_*urk 5

NSZombieEnabled很可能会帮助您找到大多数过度发布的错误.来自CocoaDev:

在Xcode中使用:双击Xcode项目的Executables组中的可执行文件.单击"参数"选项卡.在"要在环境中设置的变量:"部分中,创建一个名为"NSZombieEnabled"的变量,并将其值设置为"YES".

对于特别讨厌的情况(在我的情况下是一个令人讨厌的过度自动释放错误),一些额外的标志,如NSDebugEnabled,MallocStackLogging和MallocStackLoggingNoCompact将帮助您检查任何变量的保留/释放历史记录.如何使用它们的教程可以在这里找到http://www.cocoadev.com/index.pl?DebuggingAutorelease