Ios 是否可以获取引发异常的类?

Ios 是否可以获取引发异常的类?,ios,objective-c,nsexception,Ios,Objective C,Nsexception,是否可能在运行时获取引发异常的类 如果是,那怎么办 我想做的是检测哪个类抛出了异常。我正在使用NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler*)检测我的应用程序是否崩溃。这样,我就有了NSException,我想知道哪个类抛出它 此外,它不是用于调试目的 #pragma mark - Exception Handler void HandleException(NSException *exception) { // Ha

是否可能在运行时获取引发异常的类

如果是,那怎么办

我想做的是检测哪个类抛出了异常。我正在使用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);    
    }
}
#pragma标记-异常处理程序
无效HandleException(NSException*exception)
{
//处理异常
}
void InstallUncaughtExceptionHandler()
{
NSSetUncaughtExceptionHandler(&HandleException);
//信号(SIGSYS、SIG_DFL);

对于(int x=1;x而言,您无法控制断点触发的位置。但是,一旦到达断点,您可以使用bt命令打印当前堆栈跟踪


非常好的回答。

您可以在异常处理程序中使用
+callStackSymbols
NSException
)读取堆栈跟踪。最后一个条目是系统调用。但在它下面您可以找到抛出者

@try
{
    …
}
@catch (NSException *e)
{
    NSLog( @"%@", [e callStackSymbols] );
}

只需转到Xcode左侧面板上的断点点击窗格。 按面板右下角的“+”推杆。 单击“添加异常断点”。
您的应用程序将引发的每个异常,断点将自动停止执行,您可以看到异常在代码中的位置!

您是否在寻找布尔值答案?如果是,则答案为“是”.看这里:@user3447428,谢谢!我更新了我的问题。基本上,我需要知道怎么做。@Marpace,谢谢,但我想做的是检测哪个类引发了异常。我正在使用NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler*)检测我的应用程序是否崩溃。这样,我就有了NSException,我想知道是哪个类抛出了它。@dzep查看我的代码,并将其应用于一个设置异常处理程序。由于速度慢,net刚刚看到了他的评论。谢谢!是的,我们可以使用
callStackSymbols
阅读它。我们知道提交的应用程序(.ipa)在运行时不表示它。因此,如果我们得到调用堆栈,我们仍然不知道哪个类引发了异常。如果iTunes崩溃日志有原因信息就好了。哦,我以为它是为了调试。但是你可以看到返回地址吗?(我现在无法测试。)因此,您可以遍历类及其方法的实现指针,并找到匹配项。(您必须进行边界检查,是的。)一方面听起来很难听,另一方面,如果出现异常,您有足够的时间来做这件事。这对您有用吗?我从未尝试过,但考虑过它在过去面临的问题。