是否有可能获得哪个类在运行时抛出异常?
如果是,那么怎么做?
我想做的是检测哪个类抛出了异常。我使用NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler *)来检测我的应用程序是否崩溃。这样,我就有了NSException,我想知道是哪个类抛出的
同样,它不是用于调试目的。
#pragma mark - Exception Handler
void HandleException(NSException *exception)
{
// Handle exception
}
void InstallUncaughtExceptionHandler()
{
NSSetUncaughtExceptionHandler(&HandleException);
//signal(SIGSYS, SIG_DFL);
for(int x = 1; x <= 30; x++)
{
signal(x, SIG_DFL);
}
}
您可以在异常处理程序中读取+callStackSymbols
(NSException
)的堆栈跟踪。最后一项是系统调用。但在它下面你会发现投掷者。
@try
{
…
}
@catch (NSException *e)
{
NSLog( @"%@", [e callStackSymbols] );
}
您无法控制断点触发的位置。但是,一旦遇到断点,就可以使用bt命令打印当前堆栈跟踪。
进入Xcode左边面板的断点点击面板。按下面板右下角的"+"按钮。点击"添加异常断点"。你的应用程序将引发的每个异常,一个断点将自动停止执行,你可以看到异常在你的代码中的位置!