gpt4 book ai didi

iphone - 如何捕获 iPhone 上的所有程序中止错误?

转载 作者:行者123 更新时间:2023-12-03 20:58:17 25 4
gpt4 key购买 nike

我为我的 iPhone 应用程序编写了一个未处理的错误模块,但由于某种原因,一些错误设法绕过了它。

我有一个异常处理程序和以下信号处理程序集:

NSSetUncaughtExceptionHandler(&handleException);
signal(SIGILL, handleSignal);
signal(SIGABRT, handleSignal);
signal(SIGFPE, handleSignal);
signal(SIGBUS, handleSignal);
signal(SIGSEGV, handleSignal);
signal(SIGSYS, handleSignal);
signal(SIGPIPE, handleSignal);

对于大多数东西(无法识别的选择器、浮点错误等)它都有效,但是例如当我运行以下代码时:

NSString* str = [NSString stringWithFormat:@"a"];
[str release];
[str retain];

它完全避免了我的错误处理程序,而是将其打印到控制台:

Stack dump: 0. Running pass 'Combine redundant instructions' on function '@glgRunProcessor10'**

我有另一个打印了以下内容(但我不记得我运行了什么代码来导致它):

Stack dump: 0. Running pass 'Linear Scan Register Allocator' on function '@gldLLVMFPTransform5'

如果我这样做:

NSString* str = [NSString stringWithFormat:@"a"];
[str release];
[str init];

它根本不打印任何内容,只是退出程序。

有谁知道一种万无一失的方法来确保所有错误都被捕获并通过处理程序例程运行?

最佳答案

事实证明,异常处理程序每​​次都会被调用,但根据崩溃情况,stdout 和 stderr 可能在错误处理程序运行时已经关闭,这意味着 NSLog() 消息不会打印出来。

我通过打开一个文件并将内容转储到该文件来确认。

关于iphone - 如何捕获 iPhone 上的所有程序中止错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3320160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com