如何让我的xcode堆栈跟踪再次可读?

时间:2011-10-25 08:11:28

标签: iphone objective-c xcode ipad

调试我的xcode项目时遇到问题。 当我的应用程序崩溃时,我得到一个不可读的堆栈跟踪:

2011-10-25 10:03:29.966 fruehstueck[2541:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(0x352918bf 0x303ce1e5 0x351e620f 0x2c381 0x46f6d 0x3138f7ff 0x3139bc39 0x3139baa9 0x3139b98f 0x3139b211 0x3139af53 0x3138f673 0x3138f349 0x3a347 0x3aa87 0x351eb435 0x3147473f 0x3137050f 0x3136ff01 0x313564ed 0x31355d2d 0x3717be13 0x35265553 0x352654f5 0x35264343 0x351e74dd 0x351e73a5 0x3717afed 0x31384743 0x2e01 0x2dc0)

代码本身不会在我的源代码中停止,而是在收到SIGBART信号的行“int retVal = ...”中停止。

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

有人可以告诉我,我是否可以取回我的二手堆栈跟踪,至少我可以查看我的应用程序崩溃的哪一行?

提前, 特立独行

3 个答案:

答案 0 :(得分:1)

非常简单:

-[__NSArrayM insertObject:atIndex:]: object cannot be nil

如果你想跟踪它并且你知道这些步骤,那么猜测哪个“insertObject”调用被赋予nil指针就不会太长。

为了获得正确的堆栈跟踪,您是否尝试过清理构建?另外,尝试使用断点。 (并确保您没有使用XCode的测试版)。

答案 1 :(得分:1)

您没有为UIApplicationMain分配应用代理。这是故意的吗?

如果没有,如果您使用的是Xcode 4.2和iOS5 SDK,那么您的主要内容必须如下:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

答案 2 :(得分:0)

从我所看到的,你不能再实际上象征着调用堆栈了,但你可以解决这个问题。如果您不介意更改应用程序代码或在Xcode窗口的Debug Navigator中使用图形调用堆栈,请查看this