Android Native/Tombstone Crash Log 详细分析(转)
转自:http://weibo.com/p/230418702c2db50102vc2h
- 1.Library Symbols (共享库的符号)
- 2.Analyze Tools (可用到的分析工具)
- 3.CrashLog – Header
- 4.CrashLog – Backtrace(Formost crashes)
- 5.CrashLog – Registers
- 6.CrashLog – Memory
- 7.CrashLog – Stack
- 8.Library Base Address (共享库在内存中基地址)
2.Analyze Tools
02 #通过backtrace一栏提供的地址查询对应的符号,可以定位到文件,函数,行数.
03 Usage:addr2line –aCfe libs $(trace_address)
04
05 ndk-stack(android-ndk-r8d\ndk-stack)
06 #相当于执行多次addr2line,可以直接针对一份crash log使用,会输出所有backtrace里地址对应的symbol
07 Usage:ndk-stack –sym $(lib_directory) –dump$(crash_log_file)
08
09 objdump(android-ndk-r8d\toolchains\arm-linux-androideabi-4.7\prebuilt\windows\bin)
10 #Dump the objectfile. 通过汇编代码定位错误的原因,大部分复杂的问题可以通过这种方式得到解决。
11 Usage:objdump -S $(objfile) > $(output_file)
2 Builddescription: xxxx
3 Build:xxxx
4 Hardware:xxxx
5 Revision:0
6 Bootloader:unknown
7 Radio:unknown
8 Kernel:Linux version 3.4.5 xxxx
02 #00 pc 00026fbc /system/lib/libc.so
03 #01 pc 000004cf /data/app-lib/com.example.hellojni-1/libhello-jni.so(Java_com_example_hellojni_HelloJni_stringFromJNI+18)
04 #02 pc 0001e610 /system/lib/libdvm.so(dvmPlatformInvoke+112)
05 #03 pc 0004e015 /system/lib/libdvm.so (dvmCallJNIMethod(unsignedint const*, JValue*, Method const*, Thread*)+500)
06 #04 pc 00050421 /system/lib/libdvm.so(dvmResolveNativeMethod(unsigned int const*, JValue*, Methodconst*, Thread*)+200)
07 #05 pc 000279e0 /system/lib/libdvm.so
08 #06 pc 0002b934 /system/lib/libdvm.so (dvmInterpret(Thread*,Method const*, JValue*)+180)
09 #07 pc 0006175f /system/lib/libdvm.so (dvmInvokeMethod(Object*,Method const*, ArrayObject*, ArrayObject*, ClassObject*,bool)+374)
10 #08 pc 00069785 /system/lib/libdvm.so
11 #09 pc 000279e0 /system/lib/libdvm.so
12 #10 pc 0002b934 /system/lib/libdvm.so (dvmInterpret(Thread*,Method const*, JValue*)+180)
13 #11 pc 00061439 /system/lib/libdvm.so (dvmCallMethodV(Thread*,Method const*, Object*, bool, JValue*,std::__va_list)+272)
14 #12 pc 0004a2ed /system/lib/libdvm.so
15 #13 pc 0004d501 /system/lib/libandroid_runtime.so
16 #14 pc 0004e259 /system/lib/libandroid_runtime.so(android::AndroidRuntime::start(char const*, charconst*)+536)
17 #15 pc 00000db7 /system/bin/app_process
18 #16 pc 00020ea0 /system/lib/libc.so(__libc_init+64)
19 #17 pc 00000ae8 /system/bin/app_process
2 0x4cf
3 java_com_example_hellojni_HelloJni_stringFromJNI
4 /ANDROID_PRODUCT/hello-jni/jni/hello-jni.c:48
17 #include
18 #include
19
20
26 voidfunc_a(char *p);
27 voidfunc_b(char *p);
28 voidfunc_a(char *p)
29 {
30 const char* A = "AAAAAAAAA";// len= 9
31 char* a = "dead";
32 memcpy(p, A, strlen(A));
33 memcpy(p, a, strlen(a));
34 p[strlen(a)] = 0;
35 func_b(p);
36 }
37 voidfunc_b(char *p)
38 {
39 char* b = 0xddeeaadd;
40 memcpy(b, p, strlen(p));
41 }
42
43 jstring
44 Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env,
45 jobject thiz )
46 {
47 char buf[10];
48 func_a(buf);
49 return (*env)->NewStringUTF(env, "Hello from JNI!");
50 }
03 r0 ddeeaadd r1 beab238c r2 00000004 r3beab2390
04 r4 4012b260 r5 40e1b760 r6 00000004 r74bdd2ca0
05 r8 beab23a8 r9 4bdd2c98 sl 40e1d050 fpbeab23bc
06 ip 80000000 sp beab2380 lr 518254d3 pc 400dffbc cpsr 80000010
07 d0 4141414141414164 d1 6e6a6f6c6c656865
08 d2 3133393766666661 d3 726f6c6f632f3c64
09 d4 3e2d2d206f646f54 d5 6f633c202020200a
10 d6 656d616e20726f6c d7 3f8000003f800000
11 d8 0000000000000000 d9 0000000000000000
12 d10 0000000000000000 d11 0000000000000000
13 d12 0000000000000000 d13 0000000000000000
14 d14 0000000000000000 d15 0000000000000000
15 d16 000000000000019e d17 000000000000019e
16 d18 0000000000000000 d19 000000e600000000
17 d20 e600000000000000 d21 0000000000000000
18 d22 0000000000000000 d23 090a0b0c0d0e0f10
19 d24 0000004d0000003d d25 000000e600000000
20 d26 000000e7000000b7 d27 0000000000000000
21 d28 0000004d0000003d d29 0000000000000000
22 d30 0000000100000001 d31 0000000100000001
23 scr 60000090
2 beab236c 4f659a18 51825532518254a5 df0027ad
3 beab237c 00000000 ddeeaadd518254d3 64616564
4 beab238c 41414100 41714641a8616987 40e1d040
5 beab239c 4c11cb40 40e1d04040a2f614 4bdd2c94
6 beab23ac 00000000 4171460800000001 417093c4
7 beab23bc 40a5f019 4bdd2c94518215a3 518254bd
这两段的大致意思为从r1地址读取4个字节放到d0~d3,r1地址增加,然后将d0~d3中的数据存入到r0的地址去,同时r0也增加。
Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env,
jobject thiz )
{
a: 447c add r4, pc
c: 6824 ldr r4, [r4, #0]
e: 6821 ldr r1, [r4, #0]
10: 9103 str r1, [sp, #12]
char buf[10];
func_a(buf);
12: f7ff fffe bl 0<</span>Java_com_example_hellojni_HelloJni_stringFromJNI>
return (*env)->NewStringUTF(env, "Hello from JNI!");
16: 6828 ldr r0, [r5, #0]
18: 4907 ldr r1, [pc, #28] ; (38 <</span>Java_com_example_hellojni_HelloJni_stringFromJNI+0x38>)
1a: f8d0 229c ldr.w r2, [r0, #668] ; 0x29c
1e: 4628 mov r0, r5
20: 4479 add r1, pc
22: 4790 blx r2
}
{
0: b510 push {r4, lr}
2: 4604 mov r4, r0
4: f7ff fffe bl 0<</span>strlen>
8: 4621 mov r1, r4
a: 4602 mov r2, r0
c: 4802 ldr r0, [pc, #8] ; (18 <</span>func_b+0x18>)
}
e: e8bd 4010 ldmia.w sp!, {r4, lr}
12: f7ff bffe b.w 0<</span>memcpy>
16: bf00 nop
18: ddeeaadd .word 0xddeeaadd
beab2340 4012ac68
beab2344 50572968
beab2348 4f659a50
beab234c 0000002f
beab2350 00000038
beab2354 50572960
beab2358 beab2390 [stack]
beab235c 4012ac68
beab2360 00000071
beab2364 400cb528 /system/lib/libc.so
beab2368 00000208
beab236c 4f659a18
beab2370 51825532 /data/app-lib/com.example.hellojni-1/libhello-jni.so
beab2374 518254a5 /data/app-lib/com.example.hellojni-1/libhello-jni.so(func_a+56)
beab2378 df0027ad
beab237c 00000000
#00 beab2380 ddeeaadd
beab2384 518254d3 /data/app-lib/com.example.hellojni-1/libhello-jni.so(Java_com_example_hellojni_HelloJni_stringFromJNI+22)
#01 beab2388 64616564
Android Native/Tombstone Crash Log 详细分析(转)的更多相关文章
- appium的log详细分析
下面介绍appium日志的大概分析 //启动appium服务成功2017-03-24 11:22:49:218 - info: [Appium] Welcome to Appium v1.6.3201 ...
- Android 6.0权限全面详细分析和解决方案
原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...
- 浅谈 iOS 之 Crash log 符号化
其实,对于做移动 APP 开发的同学来说,质量和体验都是同等重要的.一个 APP 应用如果经常「闪退」,是产品质量很差的一个体现,那么用户体验就更不用再提了. *** 上面是笔者截取的国外一家公司对用 ...
- android 底层log分析 内存及backtrace tombstone/crash
Build fingerprint: 'XXXXXXXXX'pid: 1658, tid: 13086 >>> system_server <<<signal 1 ...
- Android Native crash日志分析
在Android应用crash的类型中,native类型crash应该是比较难的一种了,因为大家接触的少,然后相对也要多转几道工序,所有大部分对这个都比较生疏.虽然相关文章也有很多了,但是我在刚开始学 ...
- Android平台抓取native crash log
Android开发中,在Java层可以方便的捕获crashlog,但对于 Native 层的 crashlog 通常无法直接获取,只能通过系统的logcat来分析crash日志. 做过 Linux 和 ...
- Android log 日志分析
一. Log 日志中 Bug 类型 程序异常强制关闭: Force Close ,Fatal 程序无响应: Application Not Response , ANR(应用无响应).一般是主线程超时 ...
- android ListView 九大重要属性详细分析、
android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...
- 详细分析MySQL事务日志(redo log和undo log)
innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...
随机推荐
- VS2008快捷键_大全
Ctrl+B,C: 清除全部标签 Ctrl+I: 渐进式搜索 Ctrl+Shift+I: 反向渐进式搜索 Ctrl+F: 查找 Ctrl+Shift+F: 在文件中查找 F3: 查找下一个 Shift ...
- iOS面试题集
现在寒假时间在家里面无法敲代码了,但是自己总要找些事情来做,回头想想马上就要开始就业了,所以不免要参加面试,于是便开始了面试题集的浏览和探索,今天下午我看了一部分的面试题感觉还是挺实用的,所以以后还是 ...
- Linux 挂载命令 --mount
1.挂载光盘命令 mount : mount [-t vfstype] [-o options] device dir mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点 -t ...
- Day_8.《无懈可击的web设计》-巧妙地浮动效果
> 本章内容略显陈旧,主要描述如何用浮动替代表格布局,并没有什么出彩的地方.不过其间提到了清楚浮动的几种方法,那么今天就总结一下如何清楚浮动吧. #### 为什么要清除浮动?虽说是清除浮动,其实 ...
- Code Complete 读后总结和新的扩展阅读计划
Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...
- JavaScript禁止用户多次提交方法
[当服务器超载时,会出现提交卡顿的现象,但是用户在操作时,会不停重复点击提交,会造成服务器压力更大.所以我们需要进行限制] [1]将提交按钮禁止 <html> <head> & ...
- uva 230 Borrowers(摘)<vector>"结构体“ 膜拜!
I mean your borrowers of books--those mutilators of collections, spoilers of the symmetry of shelves ...
- tomcat7.0的源码下载
如果想知道servlet的HttpServlet的实现细节,想知道jsp的org.apache.jasper.runtime.HttpJspBase的实现细节,想知道tomcat关于servlet和j ...
- WordPress设置固定链接和邮件提醒遇到的问题
固定链接1.WordPress根目录下有一个.h...文件,记录文章链接类型对应的配置,要保证该文件的可写全权限:2.设置Apache2的rewrite模块启动,/etc/apache2/modle- ...
- JQuery中的省市联动
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...