在应用程序中,我们可以注册以下代码集来捕获崩溃
signal(SIGILL) { _ in
print("Signal Kill")
}
ncaughtExceptionHandler { exception in
print("Exception caught: (exception)")
}
但我也想在单元测试目标中实现这一点。我该怎么做?
如果需要在单元测试运行之前安装信号处理程序,则可以创建类似于以下内容的.m
文件:
// setup.m
static void __attribute__((constructor)) setup() {
// switch to Swift as soon as possible :)
[MySignalHandlers installAllHandlers];
}
,然后创建一个执行实际工作的 Swift 类。当然,你可以在 Objective-C 中编写信号处理程序,但由于你已经在 Swift 中拥有它们,你可以重用该逻辑。
// MySignalHandlers.swift
class MySignalHandlers: NSObject {
@objc static func installAllHandlers() {
// do your thing here
}
}
加载用__attribute__((constructor))
修饰的函数时会自动执行,因此这保证了在任何单元测试运行之前安装信号处理程序。