我自己的开发(Mac,iOS)中更常见的调试错误之一是EXC_BAD_ACCESS。尽管它的共性,其起源和精确含义仍然是神秘的。 Google列出了很多错误,但我发现的唯一explanation是非正式且不完整的。
我知道这个异常(如果这是它的正确术语)意味着代码试图访问它没有读取和/或写入权限的地址 - 例如,地址或地址进程外的地址空间。但这是基于我之前对虚拟内存和受保护内存系统的经验的直观解释。我从未见过EXC_BAD_ACCESS记录在任何地方,事实上我不确定“谁”发送给我这个例外 - CPU,Mac OS,UNIX,运行时,调试器? - 所以我不知道该问谁(那个是什么类型的文档来咨询)。我想知道,例如,列出的“代码”是什么意思。或者另一个例子:其他类似的异常(可能还标记为“EXC_”)也可能来自同一个来源?
在哪里可以从权威来源找到EXC_BAD_ACCESS及其代码和一般语义的解释? 是权威来源 - 谁实际上正在检测并抛出异常?
答案 0 :(得分:2)
我能为EXC_BAD_ACCESS找到的唯一官方文档是技术Q& A,名为Finding EXC_BAD_ACCESS bugs in a Cocoa project。它已经过时了,只能证实你已经知道的事情:
这种问题通常是过度释放物体的结果。它可能非常令人困惑,因为失败往往会在错误发生后很好地发生。当程序深入框架代码时,也可能发生崩溃,通常没有自己的代码在堆栈中可见。
事实上,它可以非常混乱。至少Apple承认这一点。 :)