3

我的应用程序链接了一个导致崩溃的静态库(所以 .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)

...
4

1 回答 1

2

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

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

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

于 2013-11-27T04:27:45.703 回答