在 Unix 信号处理函数或 Mach 异常处理中,只能使用异步安全函数,主要基于三个原因。第一,崩溃时系统状态不稳定,程序可能处于任意执行点被中断,内部数据结构可能处于不一致状态。第二,崩溃时程序可能正持有某些锁,如果在异常处理中调用需要获取同一锁的非异步安全函数,会导致死锁,使崩溃信息无法被记录。第三,堆内存可能已经损坏,此时分配内存(如 malloc)可能会失败或产生不可预知的行为。因此,malloc()、free()、NSLog()、printf()、Objective-C 方法调用以及任何可能分配内存的函数都不允许在异常处理过程中使用。KSCrash 的崩溃处理设计完全遵循异步安全原则,确保在极端情况下也能可靠地收集崩溃信息。
加载中...