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的逆向过程,其实它 ...
随机推荐
- WEB服务器4--IIS中网站、Web应用程序和虚拟目录
网站.Web应用程序和虚拟目录 在IIS中可以创建网站.Web 应用程序和虚拟目录,以便与计算机网络上的用户共享信息. “网站”.“Web 应用程序”和“虚拟目录”这三个概念的关系如图 8‑1所示. ...
- 用CSS画五角星
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- 前端--关于CSS文本
文本是网页中最重要的一种内容形式,文本几乎可以写在任何地方,块级元素中可以写行内元素中也可以写.文本都是由一个个字符组成的 ,在css布局中,每一个字符都有一个em框,通常font-size设置的大小 ...
- UML学习-活动图创建
活动图(Activity Diagram)可以实现对系统动态行为的建模,主要是将用例细化,即用例内部的细节可以以活动图的方式描述.活动图描述活动的顺序,主要表活动之间的控制流,是内部处理驱动的流程,在 ...
- Dapper simplecrud的使用
为了方便Dapper操作可以使用Dapper的相关扩展dapper simplecrud. 1.首先点击管理NuGet
- struts2 404处理
目前在做一个网络应用程序,struts2 + spring + hibernate,服务器是tomcat.希望用户在IE地址栏乱敲的时候,所敲入的所有未定义的URL都能被程序捕捉到,然后转到一个自制的 ...
- [Leetcode] Sort Colors (C++)
题目: Given an array with n objects colored red, white or blue, sort them so that objects of the same ...
- Js之Screen对象
Window Screen window.screen 对象在编写时可以不使用 window 这个前缀. 属性: screen.availWidth - 可用的屏幕宽度,以像素计,减去界面特性,比如窗 ...
- R语言学习笔记(数据预处理)
setwd("d:/r/r-data/")data=read.table("salary.txt",header=T)attach(data)mean(Sala ...
- 子元素用margin-top 为什么反而作用在父元素上?对使用margin-top 的元素本身不起作用?
在这个说明中,“collapsing margins”(折叠margin)的意思是:2个或以上盒模型之间(关系可以是相邻或嵌套)相邻的margin属性(这之间不能有非空内容.padding区域.bor ...