CnOps 社区
首页开源项目实践文章视频课程常见问答开发者工具
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具

CnOps 社区

愿景

CnOps 社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页问答为什么 iOS 崩溃处理函数中只能使用异步安全函数?

为什么 iOS 崩溃处理函数中只能使用异步安全函数?

#异步安全#信号处理#崩溃处理#死锁#内存安全

CNOps | 2026-03-19

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