分享

查看android native crash后的堆栈信息

JavaShoote 发表于 2013-12-15 23:53:01 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 8513
每次发生android runtime exception后都手足无措,因为拿到的都是如下信息:
adb logcat:
  1. F/libc (21559): Fatal signal 11 (SIGSEGV) at 0x00030010 (code=1), thread 21578 (m.yunos.browser)
  2. I/DEBUG ( 160): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
  3. I/DEBUG ( 160): Build fingerprint: 'Android/full_mako/mako:4.2.1/JOP40G/eng.yuanzhijun.20130509.085707:userdebug/test-keys'
  4. I/DEBUG ( 160): Revision: '11'
  5. I/DEBUG ( 160): pid: 21559, tid: 21578, name: m.yunos.browser >>> com.yunos.browser <<<
  6. I/DEBUG ( 160): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00030010
  7. I/DEBUG ( 160): r0 00030000 r1 74514f0c r2 0000001c r3 74252cf8
  8. ......
  9. I/DEBUG ( 160): backtrace:
  10. I/DEBUG ( 160): #00 pc 001879b2 /system/lib/libwebcore.tgl.so
  11. I/DEBUG ( 160): #01 pc 001b8109 /system/lib/libwebcore.tgl.so
  12. ......
复制代码
只能大概知道是libwebcore.tgl.so里发生了错误,如何能打印出详细的堆栈信息呢?起码也得知道是哪个方法抛的错。

开始我尝试自己写代码来捕获signal,然后再调用backtrace和backtrace_symbols,但在android的linux上用不了两个方法,估计是得装gcc的扩展库,先把这个方案搁置一下,后面再尝试。
然后我再尝试NDK下的ndk-stack,但看语义应该需要NDK编译的才能用,反正我尝试了ndk-stack -sym ...  -dump ...后,还是失败,原因是symbols找不到,如果是基于ndk开发的android native应用应该是没问题,但这里我是直接要调试android源码,也搁置一下。
最后尝试用NDK下的addr2line,这个能用,方法就是:
  1. <P> </P>
复制代码
其中Y:\webos_nexus4\out\target\product\mako\symbols\system\lib\libwebcore.tgl.so是编译出的symbols,001879b2对应的是开头看到的堆栈中的地址信息:
  1. I/DEBUG ( 160): #00 pc <SPAN style="COLOR: #ff0000">001879b2 </SPAN>/system/lib/libwebcore.tgl.so
复制代码
运行后得到如下结构:
  1. WebCore::InspectorInstrumentation::instrumentingAgentsForContext(WebCore::ScriptExecutionContext*)
复制代码

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条