ios - EXC_BREAKPOINT 代码和子代码的含义是什么?
<p><p>通常当我设置 lldb 观察点时,当它们被命中时,lldb 会说观察点命中旧值:新值。但是,我在似乎被写入第 3 方库 (libjpeg-turbo) 内部的地址上设置了一个观察点,而不是通常的观察点命中,我看到的是 EXC_BREAKPOINT code=258, subcode=0xADDRESS。</p >
<p>在所有情况下,我都可以看到子代码必须是地址,因为它始终等于地址或接近我设置观察点的地址。谁能证实这一点?</p>
<p>如果我删除观察点并继续运行,lldb 不会因 EXC_BREAKPOINT 而暂停。但是代码是什么意思,我在哪里可以找到一些官方文档呢?</p>
<p>exc_types.h 没有提供任何详细信息。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>对于任何对此问题感兴趣的人,有一篇关于该主题的好文章:</p>
<p> <a href="http://www.voidcn.com/article/p-sofdugyh-bpy.html" rel="noreferrer noopener nofollow">Understanding iOS Exception Types</a> </p>
<hr/>
<blockquote>
<p>In all cases, I can see that the subcode must be the address, as it's always equal to the address or close to the one I set the watchpoint to. Can anyone confirm this?</p>
</blockquote>
<p><code>exception_types.h</code> headers 中没有太多信息:</p>
<pre><code>open -t /Applications/Xcode.app//Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/mach/exception_types.h
</code></pre>
<p>我可以确认我总是看到 <code>EXC_BREAKPOINT</code> 在子代码中有地址。</p>
<p>但是标题中的其他类型表示 <code>subcode</code> 可以有不同种类的信息:</p>
<pre><code>#define EXC_EMULATION 4 /* Emulation instruction */
/* Emulation support instruction encountered */
/* Details in code and subcode fields */
</code></pre>
<hr/>
<p>我们必须调查一个产生的 Swift 崩溃:<code>EXC_BREAKPOINT</code>。在我们的例子中,它归结为 Swift 类型的强制。以下两种情况都会导致 ARM 设备上出现 <code>EXC_BREAKPOINT</code>:</p>
<pre><code>func test_crash() {
let num = Int(DBL_MAX)
}
func test_crash_2() {
let num = Int(Double(0) / Double(0))
}
</code></pre>
<p>在这两种情况下,EXC_BREAKPOINT 都有一个带有地址的子代码,如果您查看程序集,该地址就是 <code>sbrk</code> 指令的地址。</p></p>
<p style="font-size: 20px;">关于ios - EXC_BREAKPOINT 代码和子代码的含义是什么?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/27987321/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/27987321/
</a>
</p>
页:
[1]