对于任何对此问题感兴趣的人,都有一篇关于该主题的好文章:
了解 iOS 异常类型
在所有情况下,我都可以看到子代码必须是地址,因为它始终等于地址或接近我设置观察点的地址。谁能证实这一点?
exception_types.h
标题中没有太多信息:
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 类型的强制。EXC_BREAKPOINT
ARM 设备上的以下两个原因:
func test_crash() {
let num = Int(DBL_MAX)
}
func test_crash_2() {
let num = Int(Double(0) / Double(0))
}
在这两种情况下,EXC_BREAKPOINT 都有一个带有地址的子代码,sbrk
如果您查看程序集,该地址就是指令的地址。