【问题标题】:What does the code parameter in EXC_BAD_ACCESS mean?EXC_BAD_ACCESS中的code参数是什么意思?
【发布时间】:2014-11-13 18:27:16
【问题描述】:

我已经在 iOS 上使用 Objective C 大约一个月了,但之前有很多 C++ 经验。

我对@9​​87654323@ 的理解是它本质上是一个Segmentation Fault,即尝试访问允许区域之外的内存。虽然奇怪的是,我还特别在崩溃的 iOS 应用程序的某个地方看到了 SIGSEGV。我注意到有一个代码参数(例如code=1)作为此异常的一部分,我想知道该代码的具体含义。

我在 google 上翻了一下,似乎找不到关于这个错误的正式文档,and apparently I'm not alone. 有人知道这里的 code 参数是什么意思吗?

【问题讨论】:

    标签: ios objective-c exc-bad-access


    【解决方案1】:

    如果您查看设备上生成的崩溃日志,您会看到:

    Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
    Exception Codes: KERN_INVALID_ADDRESS at <some address>
    

    关于与异常关联的code参数的进一步说明,可以参考usr/include/mach/kern_return.h。它提供了可读性适中的常量名称以及与常量值相关的简短注释。

    打开该文件的最快方法是在 Xcode 文件中键入常量 KERN_INVALID_ADDRESS 并选择“跳转到定义”。 ;)

    仅供参考:code=1 直接与 KERN_INVALID_ADDRESS 相关。与此常量相关的评论简介如下:

    /* Specified address is not currently valid. */
    

    【讨论】:

    • 非常感谢。我认为 Apple 也会在他们的文档中记录这一点。
    • 我认为他们唯一合理的记录位置是他们的 Mach 内核文档 .. 以标题为 Keep Out 的页面开头的文档
    • 阻止开发人员编写内核空间代码是有道理的,但这与用户空间应用程序与内核空间交互有关。我认为对操作系统 API 和返回的正确解释将有据可查。
    猜你喜欢
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多