应用程序崩溃...objc_exception_throw

7

我的应用在某个点上一直崩溃。它没有告诉我为什么,在以下异常断点发生:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

我不知道是什么导致了崩溃。在左侧,它告诉我是由于objc_exception_throw引起的。我该如何进行调试? 谢谢


尝试调试它,直到它到达这一行。Xcode 4.2在main.m的那一行直接抛出异常的问题。如果没有这个,没有人能够帮助你解决问题。并且发布更多的代码。 - Raphael Ayres
如果您在没有设置断点的情况下运行应用程序,它应该在日志中放置一个堆栈跟踪和原因。 - JeremyP
3个回答

6
在这种情况下,我会创建一个断点,以便在所有异常发生时都会停止。如果您只是单击断点选项卡上的添加按钮,则会创建此默认断点。
使用此断点,Xcode将在异常发生的点停止,并显示发生异常的代码行以及堆栈。
我本来想发布一张图片的,但我没有足够的声望!

5

使用 @try / @catch

@try {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
@catch (NSException *ex)
{
    // log ex...
}

或者您可以使用未捕获的异常处理程序:

void uncaughtException(NSException *except)
{
    // log Except
    NSLog(@"Exception!");
}

NSSetUncaughtExceptionHandler(uncaughtException);
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

最后,您始终可以在objc异常上中断:

Product->debug->create symbolic breakpoint
Symbol: objc_exception_throw

还是不行。仍然没有日志,断点还在原来的地方 :( - 0xSina
@PragmaOnce 检查我的更新答案,其中包含两种新的调试方法! - Richard J. Ross III

1
跟随Richard的建议并实现uncaughtException处理程序。在处理程序中设置断点。当异常触发时,在输出控制台中键入以下内容:
po [except callStackSymbols]

这应该会给你更多关于异常来源的细节。

注意: except 是你使用的异常变量的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接