Android NDK日志符号化 查找crash原因

本文介绍了一种使用NDK工具分析安卓应用崩溃的方法。通过保留不同版本的libcocos2dlua.so文件并利用logcat和ndk-stack等工具,开发者能够定位和解决导致应用崩溃的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子:
1. 每次发布后,保留 frameworks\runtime-src\proj.android\obj\local\armeabi\lib***.so
   这个 so 是带调试信息的


2. logcat 抓到宕机的文件保存为 a.txt


3. ndk-stack -sym libcocos2dlua.so -dump a1.txt 可以查看宕机的数据
********** Crash dump: **********
Build fingerprint: 'samsung/t0ltezm/t0ltecmcc:4.2.2/JDQ39/N7108DZMUANL1:user/release-keys'
pid: 27149, tid: 27445, name: Thread-13953  >>> com.zzy.bigdevil <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000020
Stack frame 08-11 18:59:30.372   194   194 I DEBUG   :     #00  pc 003362ca  /data/app-lib/com.zzy.bigdevil-


1/libcocos2dlua.so (cocostudio::Armature::init(std::string const&)+209)
Stack frame 08-11 18:59:30.372   194   194 I DEBUG   :     #01  pc 007bb7ff  /data/app-lib/com.zzy.bigdevil-


1/libcocos2dlua.so (__aeabi_uidivmod+6)
Crash dump is completed




4. arm-linux-androideabi-addr2line.exe 可以查看报错的行
C:\Users\zxujie>C:\android-ndk-r10d\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin\arm-linux-


androideabi-addr2line.exe -e libcocos2dlua.so -a 003362ca


0x003362ca
/Users/Shared/cocos_publish/bigdevil/program/frameworks/runtime-src/proj.android/../../cocos2d-x/cocos//editor-


support/cocostudio/CCArmature.cpp:142


查找闪退,保留几个版本的 proj.android\obj\local\armeabi\libcocos2dlua.so 是比较必要的


参考:

http://mp.weixin.qq.com/s?__biz=MjM5MzcwOTI3OA==&mid=211893108&idx=1&sn=cbabb8247fb3e2da91042e70e7d992b8&scene=1&srcid=06087AtLneMcQspEmOrJOXzf#rd


http://www.oschina.net/question/2241352_213433



http://qiang106.iteye.com/blog/1830416


### Android 应用的墓碑分析 当应用程序发生崩溃时,Android 系统会创建一个名为 tombstone 的文件来记录异常情况。这些文件通常位于 `/data/tombstones/` 目录下,并包含了关于崩溃事件的重要信息[^1]。 #### 获取 Tombstone 文件 要访问 tombstone 日志,在开发环境中可以通过 ADB 命令拉取数据: ```bash adb shell dumpsys dropbox | grep native-crash ``` 上述命令用于查找最近一次原生代码级别的崩溃日志位置。接着可以使用如下指令导出具体的 tombstone 文本到本地计算机上进一步研究: ```bash adb pull /data/tombstones/<tombstone-file> ``` #### 解析 Tombstone 内容 Tombstone 文件结构化程度不高,但其中包含有价值的信息片段,比如线程堆栈跟踪、寄存器状态以及内存映射表等细节。对于 C/C++ 编写的模块而言尤其有用,因为 Java 层面的问题一般会有更详细的报告机制[^2]。 针对性能优化方面,虽然 tombstone 主要是用来诊断致命错误,不过通过观察频繁发生的特定类型的 crash 或者 ANR (Application Not Responding),也可以间接反映出某些潜在效率瓶颈所在之处[^3]。 #### 工具支持 除了手动解析外,还可以借助第三方工具简化这一过程。例如 Google 提供了 `ndk-stack` 脚本来帮助反编译并解释来自不同平台架构下的调用链路;另外还有专门面向移动开发者设计的日志管理解决方案能够自动化收集和展示这类调试资料[^4]。 ```bash $NDK_HOME/ndk-stack -sym <path-to-symbols> -dump <path-to-tombstone> ``` 此脚本可以根据符号表将难以理解的十六进制地址转换成易于识别的方法名,从而大大提高了排查问题的速度与准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值