ios - 来自 UIAlertView _performPopup 的低级 iOS 崩溃

标签 ios crash uialertview

我最近遇到了一些低级别的崩溃,尤其是这一次,很难确定应用程序的来源/状态。有没有人看到这个或知道这个问题?谢谢!

异常类型:EXC_BAD_ACCESS (SIGSEGV) 异常代码:KERN_INVALID_ADDRESS 位于 0x3dcccccd 崩溃线程:0

<p></p>

<p>Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x3dcccccd
Crashed Thread:  0</p>

<p>Thread 0 Crashed:
0   libobjc.A.dylib                 0x000025fa objc_msgSend + 18
1   UIKit                           0x00162d1c -[UIAlertView(Private) _performPopup:] + 12
2   UIKit                           0x001628de -[UIAlertView(Private) _repopup] + 10
3   UIKit                           0x0016d196 -[UIAlertView(Private) _removeAlertWindowOrShowAnOldAlert] + 70
4   UIKit                           0x00162afa -[UIAlertView(Private) _popoutAnimationDidStop:finished:] + 502
5   UIKit                           0x00050ae4 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 184
6   UIKit                           0x000509ee -[UIViewAnimationState animationDidStop:finished:] + 34
7   QuartzCore                      0x0002ee8c run_animation_callbacks(double, void*) + 284
8   QuartzCore                      0x0002ed2c CA::timer_callback(__CFRunLoopTimer*, void*) + 96
9   CoreFoundation                  0x00022d1c CFRunLoopRunSpecific + 2092
10  CoreFoundation                  0x000224da CFRunLoopRunInMode + 42
11  GraphicsServices                0x000030d4 GSEventRunModal + 108
12  GraphicsServices                0x00003180 GSEventRun + 56
13  UIKit                           0x0000342a -[UIApplication _run] + 374
14  UIKit                           0x00001954 UIApplicationMain + 636
15  iPadDrinkHub.1.0.7              0x00002f24 0x1000 + 7972
16  iPadDrinkHub.1.0.7              0x00002ed8 0x1000 + 7896</p>

<p></p>

最佳答案

奇怪的崩溃有时是内存损坏和/或管理不善的症状。几天前,我刚刚在我的一个应用程序中发现并修复了一个难以发现的错误。该应用程序在 iOS 3.2 上可以完美运行 6 个月,但在 iOS 4.2 上会立即崩溃。在 applicationDidFinishLaunching 期间将主视图添加到窗口时发生崩溃。堆栈跟踪显示 100% iOS 代码;在任何地方都没有我的单一功能(applicationDidFinishLaunching 除外)。事实证明,我过度释放了代码中的 UIImage,该代码在加载 View 时已被调用。 (我错误地在自动释放的 UIImage 上调用了释放)。

我还没有看到您所看到的具体崩溃,但您可以尝试以下一些可能会有所帮助的事情:

(1) 使用 NSZombieEnabled 运行应用程序。这是您通过 Xcode 设置的环境变量,它通常会识别您可能引用已释放对象的位置(例如,就像我之前提到的过度释放示例)。更多详细信息在这里:

http://www.cocoadev.com/index.pl?NSZombieEnabled

(2) 您可以打开日志记录,记录发送给所有对象的所有消息。日志被写入 tmp 文件夹中的文本文件。如果您检查导致崩溃的日志文件,您可能会深入了解崩溃前发生的事情。这实际上是我用来解决错误的技术。您可以修改代码以启用/禁用日志记录:

instrumentObjcMessageSends(YES);
// Do stuff...
instrumentObjcMessageSends(NO);

或者,您可以直接从调试器调用该函数。例如,在崩溃前设置一个断点,然后进入调试器控制台并执行以下操作:

(gdb) call (void)instrumentObjcMessageSends(YES)

其他详细信息在这里:

http://www.dribin.org/dave/blog/archives/2006/04/22/tracing_objc/

关于ios - 来自 UIAlertView _performPopup 的低级 iOS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4309491/

相关文章:

iOS崩溃原因是 “forbid application start”

iphone - 获取所选单元格的索引路径

ios - 无法将类型 'UIAlertControllerStyle.Type' 的值转换为预期的参数类型 'UIAlertControllerStyle'

ios - 是否有任何简单的方法可以在所有方法中添加NSLog或任何日志记录语句?

ios - 仅在特定情况下隐藏多任务切换器中的屏幕截图

ios - IOS 中的 UIAutomation 错误

swift - 致命异常: NSInternalInconsistencyException while using formatter to convert string to date

asp.net-core - 处理 Razor 页面异常

objective-c - 从 UIView/NSObject 类显示 UIAlertController

ios - TCC __TCCAccessRequest_block_invoke