据我了解,当你试图访问不良内存时会发生EXC_BAD_ACCESS(如果我错了,请随时纠正我)?
有没有办法像try-catch
中的Java
一样抓住它来防止应用失败?
答案 0 :(得分:24)
都能跟得上; EXC_BAD_ACCESS
意味着事情已经过去了。您的程序正在尝试访问无效的内存地址。即内存已损坏,无法预测恢复。
这可能是内存管理问题。如果您可以重现该问题,请启用NSZombies并查看会发生什么。或者在这里发布回溯。
请注意,try-catch样式异常在iOS / Cocoa中也是不可恢复的。异常不能用于可恢复的错误处理。这就是NSError的用途。
答案 1 :(得分:3)
您可以有时使用信号处理程序在main
中捕获它。但是,除了记录一些东西之外,不允许你做很多事情。
答案 2 :(得分:2)
可以使用try catch,但您首先需要知道导致问题的原因。您可以为当前版本启用NSZombie来捕获错误并消除需求。编辑当前方案,启用NSZombie。
答案 3 :(得分:1)
新的C库SignalRecovery可以使程序从诸如EXC_BAD_ACCESS
之类的操作系统异常中恢复。
可以在IOS/MacOS/Linux
中使用。
示例代码:
signal_try(label) {
// Add your code need try.
int* ptr = NULL;
*ptr = 0;
}
signal_catch(label) {
// Add your code to process exceptions, or do nothing.
siginfo_t* info = signal_info();
}
signal_end(label)
// Continue run