0

在我自己的开发(Mac、iOS)中,最常见的调试错误之一是 EXC_BAD_ACCESS。尽管它很常见,但它的起源和确切含义仍然是神秘的。谷歌列出了许多出现的错误,但我能找到的唯一解释是非正式的和不完整的。

我知道这个异常(如果这是正确的术语)意味着代码试图访问它没有读取和/或写入权限的地址 - 例如,空地址或进程的地址空间。但这是基于我之前在虚拟内存和受保护内存系统方面的经验的直观解释。我从来没有在任何地方看到过 EXC_BAD_ACCESS 的文档,实际上我不确定“谁”向我发送了这个异常——CPU、Mac OS、UNIX、运行时、调试器?——所以我不知道该问谁(那个是,要查阅哪类文档)。例如,我想知道与异常一起列出的“代码”是什么意思。或者另一个例子:还有哪些其他类的类似异常(大概也标有“EXC_”

我在哪里可以从权威来源找到 EXC_BAD_ACCESS、其代码和一般语义的解释?什么权威来源——实际上是谁在检测和抛出异常?

4

1 回答 1

2

我能找到的关于 EXC_BAD_ACCESS 的唯一官方文档是名为Finding EXC_BAD_ACCESS bug in a Cocoa project的技术问答。它已过时,仅证实了您已经知道的内容:

这种问题通常是过度释放对象的结果。这可能非常令人困惑,因为失败往往发生在错误发生之后。当程序深入框架代码时,也可能发生崩溃,通常在堆栈中看不到您自己的代码。

确实,它可能非常令人困惑。至少苹果承认这一点。:)

于 2014-01-03T18:57:11.333 回答