【问题标题】:Is it possible to use byte offsets to locate the relevant line in the source code for my ios crash stack trace?是否可以使用字节偏移量在源代码中为我的 ios 崩溃堆栈跟踪定位相关行?
【发布时间】:2013-11-27 03:45:09
【问题描述】:

我的应用链接了一个导致崩溃的静态库(因此 .dSYM 文件在这里没有用处)。我有它的源代码,所以是否可以使用字节偏移量来定位源代码中的相关行?

以下是崩溃堆栈。我有函数 pjsua_acc_set_registration 的源代码,那么是否可以找到偏移 1535 的相关行?

Exception Type:  SIGABRT
Exception Codes: #0 at 0x38d021fc
Crashed Thread:  0

Thread 0 Crashed:
0   libsystem_kernel.dylib              0x38d021fc ___pthread_kill + 8
1   libsystem_c.dylib                   0x38cb302d _abort + 77
2   libsystem_c.dylib                   0x38c92c6b ___assert_rtn + 183
3   my app                              0x00181cff pjsua_acc_set_registration + 1535
4   CoreFoundation                      0x2e3f53d4 __invoking___ + 68
5   CoreFoundation                      0x2e33f6c7 -[NSInvocation invoke] + 287
6   CoreFoundation                      0x2e342e83 -[NSInvocation invokeWithTarget:] + 51
7   my app                              0x0015f3bb -[UABaseAppDelegateSurrogate forwardInvocation:] (UABaseAppDelegateSurrogate.m:75)

...

【问题讨论】:

    标签: ios crash stack-trace static-linking symbolicatecrash


    【解决方案1】:

    如果没有符号文件,我认为没有自动化的方法可以做到这一点。

    如果您知道 ARM 汇编程序,拥有源代码,并且手头有大量时间,您可能会通过反汇编程序来弄清楚字节偏移对应的源代码。我曾经做过这种分析,但已经好几年没有深入研究了。 (另外我从来没有学过 ARM 汇编)

    代码优化使问题变得更加困难。默认情况下,发布构建设置会开启高级别的代码优化。编译器重新排序代码,将源语句混合在一起,展开循环,将变量移动到寄存器中或将它们简化,并执行许多其他技巧,使弄清楚您正在查看的内容非常棘手。

    【讨论】:

    • 谢谢。我也是这么想的。但我还是提出了这个问题,看看有没有可能。 :(
    • @Qiulang,我的回答未标记为已接受。它有几个赞成票,但这与接受它不同。如果您认为它回答了您的问题,您应该接受一个答案,以便其他人知道它已被回答。 (您是否应该接受我的回答当然取决于您。)
    • 抱歉忘记了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多