我有一个程序的回溯堆栈(在Android ARM上运行),如下所示:
#00 pc 0001d796 /system/lib/libc.so (abort+57) [armeabi-v7a]
#01 pc 0004f663 libxx.so (__gnu_cxx::__verbose_terminate_handler()+226) [armeabi-v7a]
#02 pc 00024709 libxx.so (__cxxabiv1::__terminate(void (*)())+4) [armeabi-v7a]
#03 pc 0002477d libxx.so (std::terminate()+8) [armeabi-v7a]
#04 pc 0058f3d3 libxxx_sdk.so [armeabi-v7a]
#05 pc 00065ac7 /system/lib/libc.so (__pthread_start(void*)+22) [armeabi-v7a]
#06 pc 0001e9ad /system/lib/libc.so (__start_thread+32) [armeabi-v7a]
这可能是由异常引起的,但是我无法弄清楚libxxx_sdk.so
中抛出该异常的位置。
那么,我能做些什么使回溯对我来说更有价值,以便找出正确的问题?
注意:
- 我没有coredump文件,系统仅报告回溯信息。
- 此问题无法在本地重现。
- 当程序在用户的Android手机上运行时,很少发生此问题。
更新1
我用objdump -Cd
转储了libxxx_sdk.so
,并把地址定位在0058f3d3
附近,但仍然不知道下面是谁叫__pointer_catch
:
0055c290 <__cxxabiv1::__pointer_type_info::__pointer_catch(__cxxabiv1::__pbase_type_info const*,void**,unsigned int) const>:
~~~
...
~~~
58f3c0: e7d7 b.n 58f372 <__cxxabiv1::__pointer_type_info::__pointer_catch(__cxxabiv1::__pbase_type_info const*,unsigned int) const+0x330e2>
58f3c2: 2901 cmp r1,#1
58f3c4: d103 bne.n 58f3ce <__cxxabiv1::__pointer_type_info::__pointer_catch(__cxxabiv1::__pbase_type_info const*,unsigned int) const+0x3313e>
58f3c6: f7ed e486 blx 17ccd4 <__cxa_begin_catch@plt>
58f3ca: f7ed e73c blx 17d244 <__cxa_rethrow@plt>
58f3ce: f7ed e482 blx 17ccd4 <__cxa_begin_catch@plt>
58f3d2: f7ee e136 blx 17d640 <std::terminate()@plt>
58f3d6: f7ed e484 blx 17cce0 <__cxa_end_catch@plt>
58f3da: b114 cbz r4,58f3e2 <__cxxabiv1::__pointer_type_info::__pointer_catch(__cxxabiv1::__pbase_type_info const*,unsigned int) const+0x33152>
58f3dc: 4620 mov r0,r4
...
~~~
谢谢!