如何仅使用iOS 10捕获iOS Swift 3.0中的崩溃

时间:2017-06-09 08:35:04

标签: ios objective-c swift crash crash-dumps

我正在尝试编写一些基本代码,以便在不使用第三方库的情况下使用Swift 3.0捕获iOS 10+中的崩溃。

我找到了以下功能:

// Capturing exceptions 

NSSetUncaughtExceptionHandler { exception in
        print("Exception: \(exception.name) \(exception.reason!)\(exception.description)")
        print(exception.callStackSymbols)
    }

    // Capturing other crashes - **is this enough ????**
    // I wrote these in application didFinishLaunchingWithOptions method, but these don't get called. 
    signal(SIGABRT) {(a) in
        print(a)
    }

    signal(SIGABRT){(a) in
        print(a)
    }

    signal(SIGILL){(a) in
        print(a)
    }

    signal(SIGSEGV){(a) in
        print(a)
    }

    signal(SIGFPE){(a) in
        print(a)
    }

    signal(SIGBUS){(a) in
        print(a)
    }
    signal(SIGPIPE){(a) in
        print(a)
    }

1 - 这些方法是否足够?

2 - 如果是这样,我应该在哪里召唤他们捕捉崩溃?

为了触发崩溃,我在ViewDidLoad中编写了以下方法,该方法是项目中唯一的ViewController对象:

enter image description here

但是,此方法为我提供了 EXC_BREAKPOINT ,而不是上面的崩溃之一。

3 - 如何以编程方式捕获 EXC_BREAKPOINT

4 - 还有其他方法可以尝试触发崩溃吗?

1 个答案:

答案 0 :(得分:0)

你知道iOS有TestFlight,你可以从Apple的网站上为你的应用程序崩溃吗?

如果您出于教育目的这样做很好,但除此之外,您不需要编写崩溃处理代码。

如果您只是为了好玩而这样做,我认为您的困惑来自于EXC_BREAKPOINT是CPU异常,而不是ObjC异常。这些是使用标准的Unix信号处理程序提供给您的应用程序的,因此您必须使用它。