是否有可能知道抛出异常的是哪个类



是否有可能获得哪个类在运行时抛出异常?

如果是,那么怎么做?

我想做的是检测哪个类抛出了异常。我使用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左边面板的断点点击面板。按下面板右下角的"+"按钮。点击"添加异常断点"。你的应用程序将引发的每个异常,一个断点将自动停止执行,你可以看到异常在你的代码中的位置!

最新更新