Android使用ndk-stack获取so奔溃堆栈

利用NDK做开发,因为各种原因的不小心,导致了闪退问题,没有stack的话,很难查到问题的所在。这时候ndk-stack出场了。

 

先看看如下DUMP信息:

 

********** Crash dump: **********
Build fingerprint: 'OPPO/A33/A33:5.1.1/LMY47V/1390465867:user/release-keys'
pid: 1335, tid: 1398, name: Thread-4214  >>> com.example.dctool <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xdeadbaad
Stack frame #00 pc 00028f20  /system/lib/libc.so (dlfree+1239)
Stack frame #01 pc 0000f3e3  /system/lib/libc.so (free+10)
Stack frame #02 pc 000559e3  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntPost(char const*, char const*, int)+318): Routine ??
??:0
Stack frame #03 pc 00056d9f  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntUploadInfo()+2638): Routine ??
??:0
Stack frame #04 pc 00059f3f  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnPingNotify(unisdk::PingRet&)+1094): Routine ??
??:0
Stack frame #05 pc 00058121  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::statistics()+512): Routine ??
??:0
Stack frame #06 pc 000585ed  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+48): Routine ??
??:0
Stack frame #07 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #08 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #09 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #10 pc 00058933  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::ping(int, int)+322): Routine ??
??:0
Stack frame #11 pc 00054bad  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntPingBaidu()+276): Routine ??
??:0
Stack frame #12 pc 00059f6f  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnPingNotify(unisdk::PingRet&)+1142): Routine ??
??:0
Stack frame #13 pc 00058121  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::statistics()+512): Routine ??
??:0
Stack frame #14 pc 000585ed  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+48): Routine ??
??:0
Stack frame #15 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #16 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #17 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #18 pc 00058933  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::ping(int, int)+322): Routine ??
??:0
Stack frame #19 pc 000547c1  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntPingQQ()+276): Routine ??
??:0
Stack frame #20 pc 00059edf  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnPingNotify(unisdk::PingRet&)+998): Routine ??
??:0
Stack frame #21 pc 00058121  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::statistics()+512): Routine ??
??:0
Stack frame #22 pc 000585ed  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+48): Routine ??
??:0
Stack frame #23 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #24 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #25 pc 000585dd  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::recv_packet()+32): Routine ??
??:0
Stack frame #26 pc 00058933  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::ntping::ping(int, int)+322): Routine ??
??:0
Stack frame #27 pc 00054385  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntPing163()+276): Routine ??
??:0
Stack frame #28 pc 0005aa31  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+504): Routine ??
??:0
Stack frame #29 pc 000552a3  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntHead(char const*, int)+230): Routine ??
??:0
Stack frame #30 pc 0005aab1  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+632): Routine ??
??:0
Stack frame #31 pc 000552a3  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntHead(char const*, int)+230): Routine ??
??:0
Stack frame #32 pc 0005a9db  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+418): Routine ??
??:0
Stack frame #33 pc 000552a3  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntHead(char const*, int)+230): Routine ??
??:0
Stack frame #34 pc 0005ac51  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+1048): Routine ??
??:0
Stack frame #35 pc 000556e9  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntGet(char const*, int, int)+240): Routine ??
??:0
Stack frame #36 pc 0005ada3  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::Tobserver::OnHttpNotify(unisdk::HttpRet&)+1386): Routine ??
??:0
Stack frame #37 pc 000556e9  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::NtExecutor::ntGet(char const*, int, int)+240): Routine ??
??:0
Stack frame #38 pc 0005b6e7  /data/app/com.example.dctool-1/lib/arm/libunisdkdctool.so (unisdk::nttool::ntStartExecute(void*)+30): Routine ??
??:0
Stack frame #39 pc 000134a3  /system/lib/libc.so (__pthread_start(void*)+30)
Stack frame #40 pc 000114a7  /system/lib/libc.so (__start_thread+6)

 

上面的信息是ndk-stack解析出来的信息,使用命令如下:

adb logcat | $NDK_HOME/ndk-stack -sym $PROJECT/libs/armeabi

其中,$PROJECT/libs/armeabi是so的路径。

 

解析出来的stack顶部地址,便是引发crash的代码行,可以利用addr2line做进一步的分析,查出引发crash的API,使用如下:

arm-linux-androideabi-addr2line -a 000556ff -e libunisdkdctool.so -f -C

 

打完收工!

 

转载于:https://www.cnblogs.com/syosan/p/5735885.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值