首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS高级调试

iOS高级调试
EN

Stack Overflow用户
提问于 2013-09-03 12:56:09
回答 1查看 1.3K关注 0票数 3

当在“编辑模式->诊断”中启用“守护malloc”时,我在下面找到了问题的解决方案。第三方代码不恰当地使用内存。

我在我的iOS应用程序上随机崩溃了几次(使用ARC,参见下面)。我觉得这是由于过度释放的物体造成的。

我试图在NSZombie中启用xCode,但在崩溃前控制台中没有收到警告。僵尸仪器也有同样的问题--没有检测到错误。“所有异常”上的断点在objc_msgSend或类似的东西上停止。

我无法在这里粘贴任何代码或执行逐行调试,因为我不了解崩溃的位置。

那么,有谁知道在iOS上查找错误来源的其他高级技术吗?回溯的样本:

代码语言:javascript
复制
#0  0x3c2e1cda in realizeClass(class_t*) ()
#1  0x3c2e1d46 in realizeClass(class_t*) ()
#2  0x3c2e1d46 in realizeClass(class_t*) ()
#3  0x3c2dc094 in prepareForMethodLookup ()
#4  0x3c2dbf9a in lookUpMethod ()
#5  0x3c2dbf66 in _class_lookupMethodAndLoadCache3 ()
#6  0x3c2db61a in objc_msgSend_uncached ()
#7  0x3627784c in -[UIButtonContent dealloc] ()
#8  0x34388310 in CFRelease ()
#9  0x34463434 in __CFBasicHashDrain ()
#10 0x343883d0 in CFRelease ()
#11 0x3627dee6 in -[UIButton dealloc] ()
#12 0x3627e0b4 in -[UIView dealloc] ()
#13 0x34388310 in CFRelease ()
#14 0x3439295c in -[__NSArrayM dealloc] ()
#15 0x3c2dd488 in (anonymous namespace)::AutoreleasePoolPage::pop(void*) ()
#16 0x3438a440 in _CFAutoreleasePoolPop ()
#17 0x34cbb782 in -[NSAutoreleasePool drain] ()
#18 0x341ce2ca in -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] ()
#19 0x341cd10e in _performRunLoopAction ()
#20 0x3441c6cc in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#21 0x3441a9c0 in __CFRunLoopDoObservers ()
#22 0x3441ad16 in __CFRunLoopRun ()
#23 0x3438debc in CFRunLoopRunSpecific ()
#24 0x3438dd48 in CFRunLoopRunInMode ()
#25 0x37f402ea in GSEventRunModal ()
#26 0x362a3300 in UIApplicationMain ()
#27 0x000a879c in main at main.m:16

代码语言:javascript
复制
#0  0x3c2db5be in objc_msgSend ()
#1  0x34388aaa in CFDictionaryGetValue ()
#2  0x362656cc in -[UIButton(UIButtonContentLookup) _contentForState:] ()
#3  0x36274f38 in -[UIButton(UIButtonContentLookup) _backgroundForState:usesBackgroundForNormalState:] ()
#4  0x36274e54 in -[UIButton contentRectForBounds:] ()
#5  0x362954c4 in -[UIButton layoutSubviews] ()
#6  0x36252802 in -[UIView(CALayerDelegate) layoutSublayersOfLayer:] ()
#7  0x35ffcd8a in -[CALayer layoutSublayers] ()
#8  0x35ffc928 in CA::Layer::layout_if_needed(CA::Transaction*) ()
#9  0x35ffd85c in CA::Layer::layout_and_display_if_needed(CA::Transaction*) ()
#10 0x35ffd242 in CA::Context::commit_transaction(CA::Transaction*) ()
#11 0x35ffd050 in CA::Transaction::commit() ()
#12 0x35ffceb0 in CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) ()
#13 0x3441c6cc in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#14 0x3441a9c0 in __CFRunLoopDoObservers ()
#15 0x3441ad16 in __CFRunLoopRun ()
#16 0x3438debc in CFRunLoopRunSpecific ()
#17 0x3438dd48 in CFRunLoopRunInMode ()
#18 0x37f402ea in GSEventRunModal ()
#19 0x362a3300 in UIApplicationMain ()
#20 0x0007479c in main at main.m:16

代码语言:javascript
复制
#0  0x33750f78 in objc_msgSend ()
#1  0x35a7b2e6 in CFRelease ()
#2  0x35af7b36 in __CFDictionaryStandardReleaseValue ()
#3  0x35b4b3bc in __CFBasicHashDrain ()
#4  0x35a7b39a in CFRelease ()
#5  0x332a0c88 in -[UIButton dealloc] ()
#6  0x33752174 in _objc_rootRelease ()
#7  0x35a7b2e6 in CFRelease ()
#8  0x35a9106a in -[__NSArrayM dealloc] ()
#9  0x33752174 in _objc_rootRelease ()
#10 0x33753e56 in objc_release ()
#11 0x33752eac in (anonymous namespace)::AutoreleasePoolPage::pop(void*) ()
#12 0x33752dc8 in _objc_autoreleasePoolPop ()
#13 0x35a82cfe in _CFAutoreleasePoolPop ()
#14 0x34f5898c in __NSFireDelayedPerform ()
#15 0x35b06a32 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#16 0x35b06698 in __CFRunLoopDoTimer ()
#17 0x35b0526e in __CFRunLoopRun ()
#18 0x35a884a4 in CFRunLoopRunSpecific ()
#19 0x35a8836c in CFRunLoopRunInMode ()
#20 0x33823438 in GSEventRunModal ()
#21 0x33260cd4 in UIApplicationMain ()
#22 0x001185b8 in main at main.m:16
#23 0x000f7d78 in start ()
EN

回答 1

Stack Overflow用户

发布于 2013-09-03 16:34:46

这不是一个可捕捉的例外;没有抛出。这是一次严重的撞击。最有可能是由于内存损坏,进一步证实是因为NSZombie没有帮助。

虽然这通常是对Debugging over-released objects, problem with NSZombie的欺骗,但是对于这些崩溃,有一些特定的上下文可能会有所帮助。

在这两种情况下,UIButtonContent的操作都崩溃了。UIButtonContent是UIKit的内部实现细节,最终引用到各种图像、标题等.按钮所使用的。

如果图像数据被过早释放(或损坏),则可能导致此类崩溃。我建议仔细研究一下你是如何管理图像数据的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18592928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档