在iPhone上执行错误访问,但在模拟器上不执行

在iPhone上执行错误访问,但在模拟器上不执行,iphone,objective-c,sdk,Iphone,Objective C,Sdk,当我在设备(iPhone4)上运行应用程序时,我得到了这个exc_bad_访问权限。我尝试通过将NSZombieEnabled设置为YES来启用僵尸。应用程序因exc\u坏访问而崩溃,但没有给出崩溃的原因 我修复了构建和分析的所有错误,使用标记的clang analyzer扫描构建。在模拟器上工作得非常好。应用程序解析器使用libxml2解析xml,并在UITableView上显示内容。任何帮助都将不胜感激 更新:添加(gdb)信息线程响应。有没有其他方法可以调试我错过的EXC_BAD_访问 (

当我在设备(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使用僵尸工具在仪器中运行它,并观察对象的整个生命周期。调试工具非常好,如果你可以使用它们的话。