首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >堆栈跟踪或有关Xcode/iPhone中未处理异常的更多信息

堆栈跟踪或有关Xcode/iPhone中未处理异常的更多信息
EN

Stack Overflow用户
提问于 2009-07-07 18:30:52
回答 3查看 19.2K关注 0票数 51

请原谅我的无知,当我在iPhone模拟器中运行iPhone应用程序时,关于Xcode调试器的问题一直困扰着我。

有时,当我在Interface Builder中搞乱一些东西时,我会在运行时得到一个未处理的异常,并且我会抛回Xcode。我看到的唯一一件事就是一行“未捕获的异常”之类的东西。在我看来,没有额外的信息,更不用说堆栈跟踪或任何其他有用的东西了。

在过去的十年左右,我一直在Visual Studio中进行开发,我习惯于在发生这样的事情时获得良好的堆栈跟踪和完整的异常信息。

我肯定我只是错过了一些非常明显的东西。希望..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-07 18:47:32

如果添加两个断点,则应该能够调试这些异常。为此,请转到运行|显示|断点并创建两个全局断点(我全局创建它们,因为它们在我的所有应用程序中都非常有用)。第一个应命名为"objc_exception_throw“,其位置应为"libobjc.A.dylib”。第二个应该是"-NSException raise“,它的位置应该是"CoreFoundation”。

现在,如果在启用断点的情况下开始调试应用程序,它应该会在抛出这些异常时中断。然后,您应该能够在调试器中看到导致异常的事件链。

票数 73
EN

Stack Overflow用户

发布于 2009-07-07 18:54:05

有关运行时异常的更多信息,您应该能够打开调试器控制台并查看更多信息。我假设您已经这样做了,但以防万一-您可以通过从菜单中选择Run -> Console来访问它。我不确定为什么它不能自动出现!

票数 2
EN

Stack Overflow用户

发布于 2009-07-07 18:46:53

你可以把你的UIApplicationMain包在一个try/catch中:

int main(int argc, char *argv[]) {
    int retVal;
    NSAutoreleasePool * pool;
    @try
    {
    pool = [[NSAutoreleasePool alloc] init];
    retVal = UIApplicationMain(argc, argv, nil, nil);
    }
    @catch(NSException* e)
    {
        NSLog(@"%@", e.reason);
    }
    @finally
    {
    [pool release];
    }
    return retVal;
}

您还应该研究一下在调试时设置断言处理程序:NSAssertionHandler

更新:还有未处理的异常处理程序:NSSetUncaughtExceptionHandler

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1093999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档