android系统中调试Java非常容易,一般遇到错误都在logcat中打印出错时函数的调用关系,
而C库中出错时只看到一些二进制信息,使用gdbserver调试环境搭建又比较复杂。
方法一:
下在介绍一个简单的调试库的方法,当然需要有so库的源代码
举例
a) 错误信息如下,它表示了出错时的函数调用关系(下面调上面的)
I/DEBUG ( 634): #00 pc 000078e6 /system/lib/libmultiplayerservice.so
I/DEBUG ( 634): #01 pc 000087bc /system/lib/libmultiplayerservice.so
I/DEBUG ( 634): #02 pc 0000e94e /system/lib/libsensorservice.so
I/DEBUG ( 634): #03 pc 0000a790 /system/lib/libsensorservice.so
I/DEBUG ( 634): #04 pc 0000d4b2 /system/lib/libsensorservice.so
I/DEBUG ( 634): #05 pc 0000d852 /system/lib/libsensorservice.so
I/DEBUG ( 634): #06 pc 00015ece /system/lib/libutils.so
I/DEBUG ( 634): #07 pc 0000153a /system/lib/libsystem_server.so
I/DEBUG ( 634): #08 pc 00001756 /system/lib/libsystem_server.so
I/DEBUG ( 634): #09 pc 0000adb8 /system/lib/libandroid_servers.so
I/DEBUG ( 634): #10 pc 00011cb4 /system/lib/libdvm.so
b)进入源码中带符号表的so库所在目录
$ cd out/target/product/generic/obj/SHARED_LIBRARIES/libmultiplayerservice_intermediates/LINKED
这个有个需要注意的地方:
对于可执行程序及动态库,一般在LINKED子目录中是带有符号的库(没有经过符号剥离),如果可执行文件中没有包括调试符号,您将获得??:0 作为响应。
c)用addr2line命令找到地址对应的程序位置,动态库为libmultiplayerservice.so
arm-eabi-addr2line 000078e6 -e libmultiplayerservice.so
结果:,显示出对应的程序文件和行数,如果不是debug版本,可能有一两行偏差
frameworks/base/services/multiplayerservice/PlayerSocket.cpp 421 行
d)注意
arm-eabi_addr2line在prebuild/linux-x86/toolchain/arm-eabi-xxx/bin目录下,
运行build/envsetup.sh后即可直接使用它,同目录下的objdump, nm也是常用调试命令
方法二:
google提供了一个python脚本,可以从 http://code.google.com/p/android-ndk-stacktrace-analyzer/ 下载这个python脚本,然后使用
adb logcat -d > logfile 导出 crash 的log,
使用 arm-eabi-objdump (位于build/prebuilt/linux-x86/arm-eabi-4.2.1/bin下面)把so或exe转换成汇编代码,如:
arm-eabi-objdump -S mylib.so > mylib.asm,
然后使用脚本
python parse_stack.py <asm-file> <logcat-file>
方法2使用非常方便,相比于加打印效率大大提高。
方法三:
cat logcat_3.log | ndk-stack -sym ~/[SOURCE-DIR]/out/target/product/[PROJECT]/symbols/system/lib/
相关推荐
Android黑屏死机--充电运行土豆视频【.4.4】》播放视频中黑屏死机》手动按电源键开机显示电量为6%
Android系统抓取slog方法 如死机重启log kernellog等等
如发生在 mysql 软件可承受力够但是服务器硬件,或者其他服务导致的 宕机 又或者 MYSQL 参数配置过大或者参数配置不合理...,出现宕机的可能多种多样,本文档主要体现的是宕机后可能出现的问题和后遗症较大的情况是什么
tomcat宕机重启脚本,比较简单的一种设置
LNH_MySQL 19-企业场景一主多从宕机从库宕机解决.mp4
mysql主备机宕机自动切换
本文主要是本人在实际的生产环境中遇到WebLogic宕机问题,经过自己的经验整理而总结的文档,对从事中间件的人将会是很好的参考。
处理weblogic宕机,消除内存溢出或者栈溢出问题
这一份文档是不错的资源,永不宕机的服务器
嵌入式系统,异常之后如何调试。包括错误系统介绍,出现某个异常后如何定位问题。如何避免这类问题,调试步骤。
宕机没有任何好处——POWER7 能够确保宕机不影响您的业务
宕机检测工具,可进行多台服务器,多IP,多个业务端口的检测。适合用于监视集群中各个节点是否正常工作。
手把手教你如何在gitlib服务器宕机情况下,恢复代码仓库,自己在实际工作中总结的经验,如有问题可联系zhang_x_j_3166@163.com
主要介绍了nginx负载均衡配置,宕机自动切换方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java监听Tomcat是否宕机 可以重启
由于项目需要,编写基于zookeeper集群监测服务器宕机情况,并发邮件通知代码;实现很简单,编写了客户端和服务端,基于maven实现,代码方面修改zookeeper ip地址,需要部署的服务器名和邮件信息即可实现。直接打包...
记录一次CentOS7因断电导致宕机的修复过程
eclipse开发android 过程中,自动提示死机,下载此补丁,按说明操作,即可解决
一种MSP430单片机死机问题解决方法.pdf
根据生成的宕机文件监测并发送短信提示 也可以改为监测端口发送短信提示