【问题标题】:Easiest way to force a crash in Swift在 Swift 中强制崩溃的最简单方法
【发布时间】:2015-12-07 06:56:56
【问题描述】:

在 Swift 中强制崩溃的最简单方法是什么?

我只想使用一行代码(我可以快速添加的东西)。

我不想使用断点,我真的希望应用程序崩溃。

【问题讨论】:

  • 试试abort()函数

标签: ios iphone macos swift ipad


【解决方案1】:
import Darwin

exit(0)

C 库函数void exit(int status) 立即终止调用进程。属于该进程的所有打开的文件描述符都将关闭,并且该进程的任何子进程都由进程 1 init 继承,并且进程父进程会收到一个 SIGCHLD 信号。


1/0

    var a = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        _ = 1/a

【讨论】:

  • 虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案没有用处。
【解决方案2】:

反转范围,

21...3

线程 1:致命错误:无法使用 upperBound 形成 Range

【讨论】:

    【解决方案3】:

    如果你有一个整数变量,你可以将它乘以整数限制。 (UInt的类似方法)

    【讨论】:

      【解决方案4】:

      您可以简单地尝试访问一个具有 nil 值的可选值...如果您已经声明了一个变量并且它是一个可选值,只需调用它(不要忘记打开包装),它肯定会崩溃

      【讨论】:

        【解决方案5】:

        通常你会使用

        fatalError()
        

        preconditionFailure()
        

        为此。

        它们的作用完全相同:终止程序,因此该语句之后的代码永远不会被执行。所有具有此行为的函数都使用@noreturn 属性进行注释

        你也可以这样做:

        func getInt() -> Int {
            fatalError()
        }
        

        该函数应该返回一个 Int,但由于程序永远不会到达那个点,所以您不必返回任何内容。

        【讨论】:

        • 这可以在发布应用程序中吗?它会通过认证过程吗?我的意思是应用程序在此过程中当然不会崩溃,但对我来说,它只是检查确切的日期(从现在起 2 个月后),然后调用 fatalError。
        • @LiborZapletal 你的应用程序必须不会崩溃很多才能被接受,最好在错误发生时处理它们。只有当出现严重错误时,您的应用才会崩溃
        【解决方案6】:
        [0][1]
        

        这会尝试访问单元素数组的第二个元素。

        【讨论】:

        • [][0] 短了一个字符?
        • 喜欢简洁,但它不像fatalError()那样自我记录。
        • 0/1 少了三个字符?
        • @SazzadHissainKhan 0/1 == 0 :-)
        • @SazzadHissainKhan。为什么 0/1 错误输出到输出 0?我想你的意思是 1/0。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        • 2013-08-06
        • 2013-03-19
        • 1970-01-01
        • 2015-07-18
        相关资源
        最近更新 更多