每次 Xcode 崩溃时,它都会指向 main.m 上的这一行
int retVal = UIApplicationMain(argc, argv, nil, @"AppController");
我知道 Xcode 4 调试与 3.x 相比很糟糕,但是我如何让它指向崩溃发生的行。
请不要:
- 告诉我启用 NSZombieEnabled;
- 告诉我添加一个异常断点来中断 Catch 或 Throw 上的所有异常。
- 告诉我 Xcode 4.x 比 3.x 更适合调试。
所有这些东西都是无用的或几乎无用的,并且 Xcode 继续在 main.m 的同一行崩溃......
请救我脱离这一切。
Thanks.
这是一个想法:只需对整个应用程序进行一次尝试/捕获,记录堆栈从例外,不是当前堆栈(即不是断点+检查):
main.m
int main(int argc, char *argv[])
{
@autoreleasepool {
@try {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
@catch (NSException *exception) {
NSLog(@"%@",[exception callStackSymbols]);
return 1;
}
}
}
我的理解是,我们没有一个好的方法的原因是崩溃本身直到运行循环的后期才会发生。我认为诸如未捕获的异常等之类的事情只是将应用程序置于这样的状态:will当运行循环迭代时,Apple 代码中的某个地方崩溃。这类似于用户界面崩溃......当您set蹩脚的几何体,当它尝试时它会崩溃use它。因此,我们需要从异常对象中获取堆栈,而不是从实际发生崩溃时的当前状态中获取。
我添加这个只是因为它让我有几次以为我没有可用的信息,但我只是还不够了解 Xcode(我确信这是常识,我只是很愚蠢)。有时当我think我所拥有的只是可怕的顶级范围,我所需要做的就是使用左下角的小滑块(在调试会话期间)来查看整个堆栈。由于上述原因,这通常几乎没有用(它位于问题的运行循环的另一部分)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)