非原创学习于:
//blogcsdnnet/helldevil/article/details/6682211
无论是开发还是测试如果能掌握log定位是件好事。
09-22 09:39:43083 F/libc ( 9479):code 2 (SEGV_ACCERR)fault addr 0x7a05b46000 in tid 9714 (Thread-5)pid 9479 (mxxxxgallery) 09-22 09:39:43247 F/DEBUG ( 9733): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 09-22 09:39:43248 F/DEBUG ( 9733): Build fingerprint: 'xxxx/6025H/HONG_KONG:11/RP1A200709001/7KXX:user/release-keys' 09-22 09:39:43248 F/DEBUG ( 9733): Revision: '0' 09-22 09:39:43248 F/DEBUG ( 9733): ABI: 'arm64' 09-22 09:39:43249 F/DEBUG ( 9733): Timestamp: 2020-09-22 09:39:43 080009-22 09:39:43249 F/DEBUG ( 9733): pid: 9479tid: 9714name: Thread-5 >>>xxxxgallery <<< 09-22 09:39:43249 F/DEBUG ( 9733): uid: 10099 09-22 09:39:43249 F/DEBUG ( 9733): signal 11 (SIGSEGV)code 2 (SEGV_ACCERR)fault addr 0x7a05b46000 09-22 09:39:43249 F/DEBUG ( 9733): x0 0000007763d89c70 x1 0000000000000002 x2 0000007a0428b56c x3 0000007a0428db9c 09-22 09:39:43249 F/DEBUG ( 9733): x4 0000000000000001 x5 0000000000000008 x6 0000007a0428b4e8 x7 0000000000000025 09-22 09:39:43249 F/DEBUG ( 9733): x8 0000000000000023 x9 000000000000000a x10 0000000000000021 x11 000000000000004a 09-22 09:39:43249 F/DEBUG ( 9733): x12 0000007a04289050 x13 0000007a05b45fe4 x14 0000007a0428db18 x15 0000000000000021 09-22 09:39:43250 F/DEBUG ( 9733): x16 0000000000000048 x17 0000000000000001 x18 0000007a0428b680 x19 0000000000000001 09-22 09:39:43250 F/DEBUG ( 9733): x20 0000007a0428b5e0 x21 0000007a0428dc10 x22 0000000000000009 x23 0000000000000084 09-22 09:39:43250 F/DEBUG ( 9733): x24 000000770376bcb8 x25 000000770376bb50 x26 0000007a0428b664 x27 0000007a0428dc94 09-22 09:39:43250 F/DEBUG ( 9733): x28 0000007a05b45f58 x29 0000007a05b45ecc 09-22 09:39:43250 F/DEBUG ( 9733): lr 0000007a05b45e50 sp 0000007763d89650 pc 0000007762910674 pst 0000000020000000 09-22 09:39:43
. 500 F/DEBUG ( 9733): #00 pc 00000000002eb674 /data/app/~~JBZ8-fwaJ0pWsj4hEf8wkQ==/com . xxxx. gallery-BwSA1NtaDN7WDKjYMNNIOw==/base. apk!libfacenet. so (offset 0x3552000) (BuildId: cd8fc953d21f932a219d2676a37ec6747333fb1f) 09-22 09:39:43. 500 F/DEBUG ( 9733): #01 pc 00000000002e2e90 /data/app/~~JBZ8-fwaJ0pWsj4hEf8wkQ==/com . xxxx. gallery-BwSA1NtaDN7WDKjYMNNIOw==/base. apk!libfacenet. so (offset 0x3552000) (BuildId: cd8fc953d21f932a219d2676a37ec6747333fb1f) 09-22 09:39:43. 500 F/DEBUG ( 9733): #02 pc 00000000002dbac4 /data/app/~~JBZ8-fwaJ0pWsj4hEf8wkQ==/com . xxxx. gallery-BwSA1NtaDN7WDKjYMNNIOw==/base. apk!libfacenet. so (offset 0x3552000) (BuildId:
. . . 09-22 09:39:43. 508 F/DEBUG ( 9733): #40 pc 000000000055c384 /apex/com . android. art/lib64/libart. so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*) 460) (BuildId: 132c9fd75471ac7a6d1d7331ebfeeb49) 09-22 09:39:43. 508 F/DEBUG ( 9733): #41 pc 00000000005ac204 /apex/com . android. art/lib64/libart. so (art::Thread::CreateCallback(void*) 1308) (BuildId: 132c9fd75471ac7a6d1d7331ebfeeb49) 09-22 09:39:43. 508 F/DEBUG ( 9733): #42 pc 00000000000b0658 /apex/com . android.runtime/lib64/bionic/libc . so (__pthread_start(void*)+64) (BuildId: b32164423ca0fcdb55f8214db90688c3) 09-22 09:39:43. 508 F/DEBUG ( 9733): #43 pc 0000000000050150 /apex/com . android. runtime/lib64/bionic/libc. so (__start_thread+64) (BuildId: b32164423ca0fcdb55f8214db90688c3)
1
有时候是不会有提示框出现
查看log
可过滤DEBUG 级的log
上一张别人的图
2
2
橙色部分是让我们确认问题到底发生在哪个线程中
这个的判断依据是:
如果PID和TID相同
如果PID和TID不相同
从上面例子看
2
就是下面这一堆。
09-22 09:39:43 09-22 09:39:43. 500 F/DEBUG ( 9733): backtrace:. 500 F/DEBUG ( 9733): #00 pc 00000000002eb674 /data/app/~~JBZ8-fwaJ0pWsj4hEf8wkQ==/com . xxxx. gallery-BwSA1NtaDN7WDKjYMNNIOw==/base. apk!libfacenet. so (offset 0x3552000) (BuildId: cd8fc953d21f932a219d2676a37ec6747333fb1f) 09-22 09:39:43. 500 F/DEBUG ( 9733): #01 pc 00000000002e2e90 /data/app/~~JBZ8-fwaJ0pWsj4hEf8wkQ==/com . xxxx. gallery-BwSA1NtaDN7WDKjYMNNIOw==/base. apk!libfacenet. so (offset 0x3552000) (BuildId: cd8fc953d21f932a219d2676a37ec6747333fb1f) 09-22 09:39:43. 500 F/DEBUG ( 9733): #02 pc 00000000002dbac4 /data/app/~~JBZ8-fwaJ0pWsj4hEf8wkQ==/com . xxxx. gallery-BwSA1NtaDN7WDKjYMNNIOw==/base. apk!libfacenet. so (offset 0x3552000) (BuildId:
. . . 09-22 09:39:43. 508 F/DEBUG ( 9733): #40 pc 000000000055c384 /apex/com . android. art/lib64/libart. so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+460) (BuildId: 132c9fd75471ac7a6d1d7331ebfeeb49) 09-22 09:39:43. 508 F/DEBUG ( 9733): #41 pc 00000000005ac204 /apex/com . android. art/lib64/libart. so (art::Thread::CreateCallback(void*)+1308) (BuildId: 132c9fd75471ac7a6d1d7331ebfeeb49) 09-22 09:39:43. 508 F/DEBUG ( 9733): #42 pc 00000000000b0658 /apex/com . android. runtime/lib64/bionic/libc. so (__pthread_start(void*)+64) (BuildId: b32164423ca0fcdb55f8214db90688c3) 09-22 09:39:43. 508 F/DEBUG ( 9733): #43 pc 0000000000050150 /apex/com . android. runtime/lib64/bionic/libc. so (__start_thread+64) (BuildId: b32164423ca0fcdb55f8214db90688c3)
这里所显示的程序的执行流程
所以一开始我们的目的是分析第一个出现问题的动态连接库
#43 pc 0000000000050150 /apex/
再一级一级往上分析
这一部分涉及到代码分析
所以一开始我们的目的是分析第一个出现问题的动态连接库 #15 pc 0001173c /system/lib/libc
A
B
(如果你是悲剧
addr2line -e -f libc
结果出现:
pthread_create
0
这个只是告诉你函数入口
C
使用
反汇编下你的动态连接库文件
打开这个反汇编过后的重定向文件
00011684 <pthread_create>: 11684: e92d4ff0 push {r4
1173c: ebffec2b bl c7f0 <__pthread_clone>-->就是他了
这个是ARM汇编
对上面中#15-->#00 一共16行慢慢去找
假设我们最后经过万里长针发现#00的出错的地方是
那么你可以怀疑两个地方:
1 您的指针是
2 还有就是
针对第2种比较恶心的情况
还有一种情况
cat /proc/meminfo
空闲内存=buffer+cache+free这三个字段
如果你想具体跟踪每个进程的内存使用情况
VMRSS XXXKB就是你当前进程的使用内存量
里面还有很多有用的数据
写个daemon
总之