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的逆向过程,其实它 ...
随机推荐
- [HeadFirst-HTMLCSS学习笔记][第三章创建网页]
一些基本元素 以下元素都可以用CSS变得更好看 q,<blockquote>,<em>,<br>, <strong>,ol ,ul,li,pre,cod ...
- SQL server根据值搜表名和字段
DECLARE @what varchar(800) SET @what='lll' --要搜索的字符串 DECLARE @sql varchar(8000) DECLARE TableCursor ...
- Android生命周期注意事项
生命周期图解 以下英文引用全部来自google官方文档说明,方便理解. onCreate (Bundle savedInstan ...
- ios属性和成员变量写在.h文件和.m文件中 区别?
1 其实是一样的.在.m文件上只能.m文件内部的才能访问的这个变量,如果在.h文件中,其他的文件也可以访问到这个变量. 2 写.h文件里边可以和其他的类进行交互,写.m里边只是在本类中使用! 3 ...
- 上拉、下拉UITableView,交互式 模态弹出(自定义弹出动画)
部分代码 InteractiveTransition 类继承NSObject: - (instancetype)initWithPresentingController:(UITableViewCon ...
- C++服务器设计(五):多设备类型及消息事件管理
在传统的服务器系统中,服务器仅针对接收到的客户端消息进行解析,并处理后回复响应.在该过程中服务器并不会主动判断客户端类型.但在现实中,往往存在多种类型的客户端设备,比如物联网下的智能家居系统,就存在智 ...
- JS 混淆加密
http://www.javascriptobfuscator.com/Javascript-Obfuscator.aspx http://www.javascriptobfuscator.com/d ...
- win8系统intellij输入中文问题
用上新的intellij,不过在输入汉字时出现后面的被删除,网上找了,没有找到解决方案,只有自己解决了,感觉如果是intellij不兼容win8,那么就不能用intellij,那对于习惯了intell ...
- Bootstrap的响应式,当文字超过div长度,换行问题的处理!
(1)overflow: hiddenoverflow 属性规定当内容溢出元素框时发生的事情.这个属性定义溢出元素内容区的内容会如何处理.hidden 表示内容会被修剪,并且剪掉的内容是不可见的. ( ...
- 基于cygwin构建u-boot(二)gcc的C语言标准版本号(-std=)
接上文,修改Makefile和config.mk中,.depend相关文件格式后继续编译. 四.tools文件夹的文件编译错误 错误告警如下[多行信息,请使用右侧滚动条查看]: gcc -Wall - ...