如何处理 Mac OS 应用程序中单元测试目标的崩溃

How to handle crashes in unit test target in Mac OS application

在应用程序中我们可以注册下面的代码集来捕获崩溃

        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 class。当然,您可以在 Objective-C 中编写信号处理程序,但由于您已经在 Swift 中编写了它们,因此您可以重用该逻辑。

// MySignalHandlers.swift

class MySignalHandlers: NSObject {
    @objc static func installAllHandlers() {
        // do your thing here
    }
}

__attribute__((constructor)) 装饰的函数会在加载包含它们的二进制文件时自动执行,因此这保证了在任何单元测试之前安装信号处理程序 运行。