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

标签 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 - 如果是这样,我应该在哪里调用他们来捕获崩溃?

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

enter image description here

但是,此方法给了我一个EXC_BREAKPOINT,而不是上述崩溃之一。

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

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

最佳答案

您知道 iOS 有 TestFlight,并且您可以从 Apple 网站获取应用程序的任何崩溃信息?

如果您这样做是为了教育目的,那没问题,但除此之外,您不需要编写崩溃处理代码。

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

关于ios - 如何仅使用 iOS 10 捕获 iOS Swift 3.0 中的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44453044/

相关文章:

ios - 如何将 CGRect 转换为 MapRect

iphone - NSData 返回 0 字节

swift - 由于 UICollectionViewController 无法呈现 ViewController,应用程序崩溃

ios - 将 iOS 应用发布到 App Store 后,应用内购买不起作用

ios - 通过蓝牙或 Wifi 连接到 IDevices

iphone - 为什么 UITableView 调用 UIScrollView 的委托(delegate)方法?

objective-c - UIScrollView 的 subview 中的水平 UISwipeGestureRecognizer? (UIScrollView 只需要识别垂直滚动)

core-data - 将 NSArray 转换为 Swift Array<T>

ios - 我正在使用 NavigationLink 在 View 之间导航,但它在 SwiftUI 中的单个 View 中不起作用

ios - 移动 Safari 中的网页是否可以检查是否选择了“设置”>“Safari”>“接受 Cookie 'From visited' 或 'Always'”?