在iPhone上执行错误访问,但在模拟器上不执行
当我在设备(iPhone4)上运行应用程序时,我得到了这个exc_bad_访问权限。我尝试通过将NSZombieEnabled设置为YES来启用僵尸。应用程序因exc\u坏访问而崩溃,但没有给出崩溃的原因 我修复了构建和分析的所有错误,使用标记的clang analyzer扫描构建。在模拟器上工作得非常好。应用程序解析器使用libxml2解析xml,并在UITableView上显示内容。任何帮助都将不胜感激 更新:添加(gdb)信息线程响应。有没有其他方法可以调试我错过的EXC_BAD_访问在iPhone上执行错误访问,但在模拟器上不执行,iphone,objective-c,sdk,Iphone,Objective C,Sdk,当我在设备(iPhone4)上运行应用程序时,我得到了这个exc_bad_访问权限。我尝试通过将NSZombieEnabled设置为YES来启用僵尸。应用程序因exc\u坏访问而崩溃,但没有给出崩溃的原因 我修复了构建和分析的所有错误,使用标记的clang analyzer扫描构建。在模拟器上工作得非常好。应用程序解析器使用libxml2解析xml,并在UITableView上显示内容。任何帮助都将不胜感激 更新:添加(gdb)信息线程响应。有没有其他方法可以调试我错过的EXC_BAD_访问 (
(gdb) bt
#0 0x33a0daba in CALayerStateRelease ()
#1 0x339f3d9e in CALayerFreeTransaction ()
#2 0x339f3330 in CA::Transaction::commit ()
#3 0x33a179bc in CA::Transaction::observer_callback ()
#4 0x3082823c in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#5 0x308280b0 in __CFRunLoopDoObservers ()
#6 0x3081f28c in CFRunLoopRunSpecific ()
#7 0x3081f17e in CFRunLoopRunInMode ()
#8 0x31e445f2 in GSEventRunModal ()
#9 0x31e4469e in GSEventRun ()
#10 0x31e51122 in -[UIApplication _run] ()
#11 0x31e4f12e in UIApplicationMain ()
#12 0x0000285e in main (argc=1, argv=0x2ffff53c) at /Users/Home/Desktop/ProductNavigation_libxml2_regular/main.m:14
(gdb) info threads
6 (Thread 0x770b: user=0.000000 system=0.000000 cpu=0 sleep_time=0) 0x3027a19c in __workq_kernreturn ()
5 (Thread 0x6e07: user=0.010000 system=0.010000 cpu=0 sleep_time=0) 0x30224060 in select$DARWIN_EXTSN ()
4 (Thread 0x6103: user=0.030000 system=0.030000 cpu=0 sleep_time=0) 0x301ffc98 in mach_msg_trap ()
3 (Thread 0x2003: user=0.000000 system=0.000000 cpu=0 sleep_time=0) 0x301ffc98 in mach_msg_trap ()
2 (Thread 0x1703: user=0.000000 system=0.000000 cpu=0 sleep_time=0) 0x3022c330 in kevent ()
* 1 (Thread 0x0307: user=1.160000 system=1.160000 cpu=0 sleep_time=0) 0x33a0daba in CALayerStateRelease ()
(gdb)
更新#2:指向UITableView的另一个堆栈跟踪
#0 0x3002d844 in objc_msgSend_stret ()
#1 0x31ed5b8e in -[UITableViewCellLayoutManager(UITableViewCellLayoutManagerStatic) _editingAccessoryRectForCell:offscreen:] ()
#2 0x31ed5374 in -[UITableViewCellLayoutManager(UITableViewCellLayoutManagerStatic) _reorderSeparatorRectForCell:offscreen:] ()
#3 0x31ed5266 in -[UITableViewCellLayoutManager reorderSeparatorEndingRectForCell:forNewEditingState:] ()
#4 0x31ed48ae in -[UITableViewCellLayoutManager layoutSubviewsOfCell:] ()
#5 0x3206ae24 in -[UITableViewCellLayoutManagerSubtitle layoutSubviewsOfCell:] ()
#6 0x31ed37c0 in -[UITableViewCell layoutSubviews] ()
#7 0x31e5cbc6 in -[UIView(CALayerDelegate) _layoutSublayersOfLayer:] ()
#8 0x308362ea in -[NSObject(NSObject) performSelector:withObject:] ()
#9 0x339f9948 in -[CALayer layoutSublayers] ()
#10 0x339f9700 in CALayerLayoutIfNeeded ()
#11 0x339f34ca in CA::Context::commit_transaction ()
#12 0x339f32e0 in CA::Transaction::commit ()
#13 0x33a179bc in CA::Transaction::observer_callback ()
#14 0x3082823c in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#15 0x308280b0 in __CFRunLoopDoObservers ()
#16 0x3081f6ba in __CFRunLoopRun ()
#17 0x3081f276 in CFRunLoopRunSpecific ()
#18 0x3081f17e in CFRunLoopRunInMode ()
#19 0x31e445f2 in GSEventRunModal ()
#20 0x31e4469e in GSEventRun ()
#21 0x31e51122 in -[UIApplication _run] ()
#22 0x31e4f12e in UIApplicationMain ()
从有限的信息来看,这可能是一个打印问题。您正在登录到一个文件吗?设备和模拟器上您登录的目录(即允许您从应用程序向其中写入文件的目录)可能不同。在过去记录一些调试信息时,我也遇到过类似的问题。让它在启用NSZombies的情况下运行,然后检查应该释放的内容(这听起来像是内存问题,特别是因为堆栈跟踪)
找到源代码后,修复它并高兴起来:)从代码中对print语句进行注释的那一点开始,遵循程序流程,验证对象是否正确实例化,是否也正确释放
在我看来,当程序发布一些不存在的东西时(无论是现在还是将来),程序就会崩溃。最后一条消息是
UITableViewCellLayout
,它是从设置表单元格的位置(CellForRowatineXpath等)调用的。问题在于XML解析器,解析完成后释放解析器上下文用于崩溃。将其移动到解除锁定方法修复了问题。感谢大家查看我的帖子并花时间回答我的问题。也许你可以提供一些代码来说明你在做什么。我没有登录到文件。我正在将一些tempString打印到控制台进行调试。我把它注释掉了,但没有任何效果。这是我做的第一件事。项目->活动可执行文件->参数NSZombieEnabled为是。执行错误访问时,调试器控制台上没有任何内容:(@MacDev哇,这很奇怪。我敢打赌某个地方的内存访问不好,因为当我在一个苹果框架中遇到这些崩溃时,这总是原因。这些调试工具非常糟糕,但至少NSZombie告诉你调用了哪个对象。我的意思是“CFRUNLOOP”正在调用一个观察者回调函数”-它有多模糊?在我的情况下,我不认为它是任何类型的观察者…@n13使用僵尸工具在仪器中运行它,并观察对象的整个生命周期。调试工具非常好,如果你可以使用它们的话。