This commit is contained in:
DDIsFriend
2023-08-23 09:24:40 +08:00
parent 6bd037c5dd
commit 63ca919ed5
494 changed files with 35308 additions and 6623 deletions

View File

@@ -0,0 +1,98 @@
//
// Example
// man
//
// Created by man 11/11/2018.
// Copyright © 2020 man. All rights reserved.
//
import UIKit
import Darwin
func exceptionHandler(exception: NSException) {
if CrashLogger.shared.crashed {
return
}
CrashLogger.shared.crashed = true
CrashLogger.addCrash(name: exception.name.rawValue, reason: exception.reason)
}
func handleSignal(signal: Int32) {
if CrashLogger.shared.crashed {
return
}
CrashLogger.shared.crashed = true
switch signal {
case SIGILL:
CrashLogger.addCrash(name: "SIGILL", reason: nil)
case SIGABRT:
CrashLogger.addCrash(name: "SIGABRT", reason: nil)
case SIGFPE:
CrashLogger.addCrash(name: "SIGFPE", reason: nil)
case SIGBUS:
CrashLogger.addCrash(name: "SIGBUS", reason: nil)
case SIGSEGV:
CrashLogger.addCrash(name: "SIGSEGV", reason: nil)
case SIGSYS:
CrashLogger.addCrash(name: "SIGSYS", reason: nil)
case SIGPIPE:
CrashLogger.addCrash(name: "SIGPIPE", reason: nil)
case SIGTRAP:
CrashLogger.addCrash(name: "SIGTRAP", reason: nil)
default: break
}
}
class CrashLogger {
static let shared = CrashLogger()
private init() {}
var hasBeenRegistered = false
var crashed = false
var enable: Bool = false {
didSet {
if enable {
CrashLogger.shared.register()
}
else {
CrashLogger.shared.unregister()
}
}
}
func register() {
if hasBeenRegistered == false {
hasBeenRegistered = true
NSSetUncaughtExceptionHandler(exceptionHandler)
signal(SIGILL, handleSignal)
signal(SIGABRT, handleSignal)
signal(SIGFPE, handleSignal)
signal(SIGBUS, handleSignal)
signal(SIGSEGV, handleSignal)
signal(SIGSYS, handleSignal)
signal(SIGPIPE, handleSignal)
signal(SIGTRAP, handleSignal)
}
}
func unregister() {
if hasBeenRegistered == true {
hasBeenRegistered = false
NSSetUncaughtExceptionHandler(nil)
signal(SIGILL, SIG_DFL)
signal(SIGABRT, SIG_DFL)
signal(SIGFPE, SIG_DFL)
signal(SIGBUS, SIG_DFL)
signal(SIGSEGV, SIG_DFL)
signal(SIGSYS, SIG_DFL)
signal(SIGPIPE, SIG_DFL)
signal(SIGTRAP, SIG_DFL)
}
}
static func addCrash(name: String, reason: String?) {
let newCrash = _CrashModel(name: name, reason: reason)
CrashStoreManager.shared.addCrash(newCrash)
}
}