【问题标题】:What's the meaning of the EXC_BREAKPOINT code and subcode?EXC_BREAKPOINT 代码和子代码的含义是什么?
【发布时间】:2015-01-16 15:29:46
【问题描述】:

通常当我设置 lldb 观察点时,当它们被命中时,lldb 会说观察点命中旧值:新值。但是,我在似乎被写入第 3 方库 (libjpeg-turbo) 内部的地址上设置了一个观察点,而不是通常的观察点命中,我看到的是 EXC_BREAKPOINT code=258, subcode=0xADDRESS。

在所有情况下,我都可以看到子代码必须是地址,因为它始终等于地址或接近我设置观察点的地址。谁能证实这一点?

如果我删除观察点并继续运行,lldb 不会因 EXC_BREAKPOINT 而暂停。但是代码是什么意思,我在哪里可以找到一些官方文档呢?

exc_types.h 没有提供任何详细信息。

【问题讨论】:

    标签: ios lldb watchpoint


    【解决方案1】:

    对于任何对此问题感兴趣的人,有一篇关于该主题的好文章:

    Understanding iOS Exception Types


    在所有情况下,我都可以看到子代码必须是地址,因为它始终等于地址或接近我设置观察点的地址。谁能证实这一点?

    exception_types.h headers 中没有太多信息:

    open -t /Applications/Xcode.app//Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/mach/exception_types.h
    

    我可以确认,我总是看到 EXC_BREAKPOINT 在子代码中有地址。

    但是标题中的其他类型表示subcode 可以有不同类型的信息:

    #define EXC_EMULATION       4   /* Emulation instruction */
      /* Emulation support instruction encountered */
      /* Details in code and subcode fields */
    

    我们必须调查一个产生的 Swift 崩溃:EXC_BREAKPOINT。在我们的例子中,它归结为 Swift 类型的强制。在 ARM 设备上,以下两个原因都导致 EXC_BREAKPOINT:

    func test_crash() {
      let num = Int(DBL_MAX)
    }
    
    func test_crash_2() {
      let num = Int(Double(0) / Double(0))
    }
    

    在这两种情况下,EXC_BREAKPOINT 都有一个子代码,其地址是sbrk 指令的地址,如果您查看程序集的话。

    【讨论】:

      【解决方案2】:

      exc_types.h 仅具有与架构无关的异常定义部分。您需要查看 i386/arm 子目录以找到特定于体系结构的部分。如果您在 Yosemite 上,arm 目录不会在 /usr/include/mach 中,您必须在 Xcode.app 内的 iPhoneOS SDK 中查找它。无论如何,mach/arm/exception.h 说:

      #define EXC_ARM_DA_DEBUG        0x102   /* Debug (watch/break) Fault */
      

      您怀疑子代码是访问的地址。

      但是,如果 lldb 将异常识别为执行某些更高级别的任务,则它不会报告裸异常。在这种情况下,它应该将停止原因报告为观察点命中。出于某种原因,它不会将此视为您的观察点。子码地址是不是和watch list报的一模一样?

      【讨论】:

      • 我使用观察点集表达式 -x 8 -- ADDRESS。在某些情况下,EXC_BREAKPOINT 中报告的地址正是被监视的地址,而在其他情况下,它相距 8 个字节,因此我假设 -x 8 监视的范围为 8 个字节。
      • 这听起来像是 lldb 的观察点检测中的错误。请向 bugreport.apple.com 提交错误,我们会查看。
      猜你喜欢
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多