【问题标题】:Symbolicating crash without crash log file在没有崩溃日志文件的情况下表示崩溃
【发布时间】:2019-03-11 01:24:46
【问题描述】:

它不是重复的。我的问题是如何象征崩溃错误。

我的实时应用程序崩溃了,我在 xCode 和 crashlytics 中有崩溃报告,但我没有崩溃日志,因为它发生在实时应用程序上,而且是随机的。

是否有可能在没有崩溃日志的情况下从崩溃报告中获得一些意义?

我们如何从此类报告中找出文件和行号?

以下是此类崩溃的一个示例

crash_info_entry_0
abort() called
crash_info_entry_1
myapp(569,0x16df57000) malloc: *** error for object 0x10404ddae: pointer being freed was not allocated

【问题讨论】:

  • 您对“崩溃报告”和“崩溃文件”的定义是什么?这两者有什么区别?
  • 对于崩溃文件的混淆,我们深表歉意。这是“崩溃日志”。我已经更新了问题。
  • 那你对“崩溃报告”和“崩溃日志”的定义是什么?这两个术语通常是同义词。
  • 崩溃报告来自 crashlytics。

标签: ios xcode crashlytics


【解决方案1】:

符号化是将地址转换为符号(函数、方法等)的过程。如果没有包含这些地址的崩溃日志,符号化就没有意义。您无法翻译您没有的地址。但是,您列出的输出来自哪里?看起来它可能是更大日志的一部分。您已标记问题 Crashlytics - 此报告是否来自他们的服务?

您所包含的日志记录中有一些有用的信息。好消息是它告诉你你有堆损坏。 malloc 已调用 abort,因为它检测到与其内部结构不一致。此外,符号化的堆栈跟踪不太可能对您有所帮助,因为堆损坏很少(如果有的话)是由堆栈更靠前的函数引起的。

请记住,您在此处看到的崩溃是一种效果。要解决此问题,您需要一个原因,而在这种情况下,堆栈跟踪不会让您知道。

还有更多坏消息。对堆损坏进行推理是困难的,甚至常常是不可能的。复制错误也可能是不可能的,因为内存损坏通常不是确定性的。正如您所指出的,崩溃似乎是随机的。那是因为它可能是。

我建议在这里做的是使用 Apple 提供的各种工具来帮助调试此类问题。

  • 查找其他看起来与堆损坏相关的崩溃
  • 在 Instruments 中试用 Zombies
  • 试试 malloc scribble 或 guardmalloc,这两个很好的内存调试工具

一个破坏堆的错误非常会导致许多不同类型的崩溃。这可能是一个 objc 过度释放,所以我还要留意 selectorNotRecognized 异常。这些崩溃可能会为您提供更多关于过度释放的对象类型的线索。

祝你好运!

【讨论】:

  • Tx 详细解释。是的,它是 crashlytics 日志。
猜你喜欢
  • 2014-01-08
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多