Ios Crashlytics之类的工具是如何工作的?他们如何获取/制作碰撞日志?

Ios Crashlytics之类的工具是如何工作的?他们如何获取/制作碰撞日志?,ios,crash,report,crashlytics,crash-dumps,Ios,Crash,Report,Crashlytics,Crash Dumps,我想了解Crashlytics之类的工具是如何工作的 他们如何在系统崩溃几分钟后获得崩溃日志堆栈跟踪 他们是否访问崩溃到达后生成的某种崩溃转储 在Objective-C中,我们让main.m在运行时附加一些代码,但在Swift中,它们是如何处理的 当我的应用程序崩溃时,我在哪里添加代码以查看此崩溃报告???此类服务要求您从他们的服务中添加SDK以提供崩溃报告。SDK基本上做两件事: 注册各种信号处理程序,该处理程序拦截因某些问题(例如,对象试图访问应用程序地址空间之外的内存地址)而触发应用程序退

我想了解Crashlytics之类的工具是如何工作的

他们如何在系统崩溃几分钟后获得崩溃日志堆栈跟踪

他们是否访问崩溃到达后生成的某种崩溃转储

在Objective-C中,我们让main.m在运行时附加一些代码,但在Swift中,它们是如何处理的


当我的应用程序崩溃时,我在哪里添加代码以查看此崩溃报告???

此类服务要求您从他们的服务中添加SDK以提供崩溃报告。SDK基本上做两件事:

  • 注册各种信号处理程序,该处理程序拦截因某些问题(例如,对象试图访问应用程序地址空间之外的内存地址)而触发应用程序退出的BSD信号
  • 注册一个未捕获的异常处理程序,它拦截任何代码都无法捕获的(Objective-C)异常
  • 应用程序崩溃通常由其中一个触发(存在异常,例如堆栈溢出错误,只能使用某些SDK支持的Mach异常处理程序检测到,或者如果应用程序因某些违规行为(例如长时间阻塞主线程)而被操作系统终止)

    一旦这些事件发生,SDK将尝试安全地(例如,不分配新内存,因为这可能弊大于利)获取(所有)线程的堆栈跟踪,并将该数据安全地写入磁盘。在下一个应用程序启动时,SDK将找到该数据并尝试将其发送到服务器(希望在另一次崩溃发生之前)

    这种方法与使用Objto-C、Swift、C、C++无关。 操作系统也会在崩溃时生成崩溃报告,但由于该报告位于应用程序沙箱之外,任何第三方都无法获取该报告并使用它。这就是为什么SDK需要自己获取所有数据