如何在符号化崩溃报告(iPhone / Mac)中获取正确的行号?

时间:2009-08-17 09:48:03

标签: iphone xcode macos crash-reports

在表示崩溃报告时,我注意到行号已关闭。我用一个故意导致崩溃的项目对此进行了测试。似乎生成的行号不包括某些行,例如注释行或编译器预处理器语句(不确定它的作用和不包括)...

是否有一种简单的方法可以将符号化崩溃报告中的“关闭”行号转换为源中的实际代码行?

编辑: 符号化崩溃报告中的一行示例:

7 Luisterpaal 0x00005de2 -[SWFMP3 connection:didReceiveData:] (SWFMP3.m:320)

因此,第320行几乎是正确的,但并不完全正确。这几行......

3 个答案:

答案 0 :(得分:7)

总之......没有。如果你在崩溃报告中看到这样的一行:

  

0 com.apple.CoreFoundation 0x95cb046b CFArrayAppendValue + 43

“+43”不是行号,而是从函数开头的内存位置。您编写的代码根本不存在于编译的二进制文件中 - 编译器优化并更改代码(至少在发布版本中),因此它通常与您编写的内容不匹配。

不幸的是,解决方案是为遇到崩溃的人提供一个可以远程调试的调试版本,或者至少抛出NSLog()语句来帮助跟踪它,和/或编写更小的方法。

答案 1 :(得分:3)

Technical Note显示了如何将报告与代码相关联

答案 2 :(得分:0)

我也有这个问题,但这只是因为我在查看比编译成崩溃的二进制文件更新的代码版本。当我回到我的源历史记录并找到相应版本的源时,行号完全匹配。