Home Articles

如何在Swift中捕获/记录致命错误?

Asked
Viewed 1216 times
5

例如, fatal error: unexpectedly found nil while unwrapping an Optional value . 无论原因如何,都可以捕获这些数据吗?这是 stderr 还是其他什么?

Edit: 我在http://swiftdoc.org/func/fatalError/找到了一个引用该功能的参考资料(我没有做任何事情,只能通过TestFlight崩溃报告获得远程崩溃报告,或实际上让设备得心应手 .

我能够通过 main.swift 中的 NSSetUncaughtExceptionHandler 记录所有未捕获的异常,并且我们在应用程序的其他部分进行了良好的日志记录,只要发生错误(但可能)错误 . 我希望还记录这些致命错误,以便我们的日志显示远程测试设备上发生崩溃的更完整图片 .

1 Answer

  • 1

    某些错误将转到 stderr . 这是一个简单的例子:

    $ cat tryit 
    #! /usr/bin/env swift
    
    println ("foo")
    precondition (false, "bar")
    $ ./tryit 2> /tmp/error 1> /tmp/noterror
    Illegal instruction: 4
    $ cat /tmp/noterror 
    $ cat /tmp/error
    precondition failed: bar: file ./tryit, line 4
    0  swift                    0x000000010f7faa18 llvm::sys::PrintStackTrace(__sFILE*) + 40
    1  swift                    0x000000010f7faef4 SignalHandler(int) + 452
    ...
    

    如果删除 precondition ,则结果转到 stdout

    $ cat tryit 
    #! /usr/bin/env swift
    
    println ("foo")
    $ ./tryit 2> /tmp/error 1> /tmp/noterror
    $ cat /tmp/noterror 
    foo
    $ cat /tmp/error
    

Related