这是一个想法:在整个应用程序中只进行一次尝试/捕获,从异常记录堆栈,而不是当前堆栈(即不是断点+检查):
主文件
int main(int argc, char *argv[])
{
@autoreleasepool {
@try {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
@catch (NSException *exception) {
NSLog(@"%@",[exception callStackSymbols]);
return 1;
}
}
}
我的理解是,我们没有好的方法的原因是崩溃本身直到运行循环的后期才会发生。我认为诸如未捕获的异常之类的事情只是将应用程序置于一种状态,当运行循环迭代时,它会在 Apple 代码的某处崩溃。这类似于如果您曾经在 UI 中崩溃...当您设置蹩脚的几何图形时它并不总是崩溃,当它尝试使用它时它会崩溃。出于这个原因,我们需要从异常对象中获取堆栈,而不是从实际发生崩溃时的当前状态中获取。
我会添加这个只是因为当我认为我没有可用的信息时它让我有几次,但我还不够了解 Xcode(我确信这是常识,我只是很傻)。有时当我认为我所拥有的只是可怕的顶级作用域时,我需要做的就是使用左下角的小滑块(在调试会话期间)来查看整个堆栈。由于上述原因,这通常几乎没有用(它在问题的运行循环的另一部分)。