crashlytics这样的工具如何运作?他们如何获得崩溃日志?

时间:2016-07-19 23:36:16

标签: ios crash report crashlytics crash-dumps

我想了解崩解剂这样的工具是如何运作的?

就像,他们得到崩溃日志堆栈跟踪只是在抛出和系统崩溃前几分钟? 他们访问崩溃后产生的某种崩溃转储? 在Object-C中,我们有主要的。也许在运行时附加一些代码,但他们如何处理? 我在哪里附上代码以查看此崩溃报告?

1 个答案:

答案 0 :(得分:13)

此类服务要求您添加自己的SDK以提供崩溃报告。 SDK基本上做了两件事:

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

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

    其工作方式与使用Objective-C,Swift,C,C ++无关。

    操作系统还会在崩溃时生成崩溃报告,但由于该报告位于应用程序沙箱之外,因此没有第三方可以获取该报告并使用它。这就是SDK需要自己获取所有数据的原因。