https://source.android.google.cn/devices/tech/debug?hl=ko
동적으로 연결된 실행 파일이 시작되면 여러 신호 핸들러가 등록되는데, 충돌 시 logcat에 기본 충돌 덤프가 기록되고 보다 자세한 tombstone 파일은 /data/tombstones/에 기록됩니다. tombstone은 충돌 프로세스에 대한 추가 데이터가 포함된 파일입니다. 특히, 여기에는 (신호를 포착한 스레드뿐만이 아니라) 충돌 프로세스 내 모든 스레드, 전체 메모리 맵 및 열려 있는 모든 파일 설명어에 대한 스택 트레이스가 포함되어 있습니다.
Android 8.0 이전에는 debuggerd 및 debuggerd64 데몬이 충돌을 처리했습니다. Android 8.0 이상에서는 필요에 따라 crash_dump32 및 crash_dump64가 생성됩니다.
충돌 덤퍼는 이미 연결된 항목이 없는 경우에만 연결할 수 있습니다. 즉, strace 또는 gdb 등과 같은 도구가 충돌 덤프가 발생하지 않도록 합니다.
출력 예(타임스탬프 및 관련 없는 정보는 삭제됨):
1. 메모리 참조 오류
pid: 27726, tid: 30206, name: Thread-261 >>> com.json.example <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xee2c0
r0 cbf6faa8 r1 000ee2c0 r2 00000000 r3 000ee2c0
r4 00000000 r5 00000000 r6 cbf6fa20 r7 cbb88c04
r8 cbf6fa64 r9 cbb83880 r10 cbf764f4 r11 cbf6fb18
ip 00000033 sp cbf6f9c0 lr cbb84ca8 pc cd40107c
backtrace:
#00 pc 0006207c /data/app/com.json.example-FAphohEqxrDy-lqfD7DjWQ==/lib/arm/libcc.so (lsf_dec+1996)
#01 pc 0001b5d8 /data/app/com.json.example-FAphohEqxrDy-lqfD7DjWQ==/lib/arm/libcc.so (acelp_core_dec+4188)
#02 pc 0003eb00 /data/app/com.json.example-FAphohEqxrDy-lqfD7DjWQ==/lib/arm/libcc.so (cc_dec+1140)
#03 pc 00019a50 /data/app/com.json.example-FAphohEqxrDy-lqfD7DjWQ==/lib/arm/libcc.so (Java_com_jsonmedia_jniApi_cc_decode+276)
#04 pc 0000078b /data/data/com.json.example/files/oat/arm/test.odex (offset 0x1f000)
stack:
cbf6f980 45ac21a0
cbf6f984 deafc563 <anonymous:d6b7d000>
cbf6f988 cbf76530 <anonymous:cbe7c000>
cbf6f98c cbf76570 <anonymous:cbe7c000>
cbf6f990 00000003
cbf6f994 cd44a06c /data/app/com.json.example-FAphohEqxrDy-lqfD7DjWQ==/lib/arm/libcc.so (lsf2lsp+72)
cbf6f998 46480000
cbf6f99c 00000000
- PID 27726으로 생성된 com.json.example 앱 Thread 261 에서 사용하는 so에서 에러 발생
- 로그가 존재 한다면 tid 30206을 검색해 해당 로그 확인
- backtrace 확인
> libcc.so cc_decode API에서 시작 -> lsf_dec API에서 tombstone 에러 발생
> 호출 순서 아래에서 위 #04 -> #03 -> #02 -> #01 -> #00 이슈 발생한 목적지
2. NullPoint 오류
pid: 5974, tid: 14230, name: Thread-943 >>> com.json.example <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xf
Cause: null pointer dereference
r0 0000003b r1 00000000 r2 a4863474 r3 00000003
r4 ffffffff r5 00000001 r6 ffffffff r7 c9225008
r8 ed251d8c r9 e28dd600 r10 5f68721c r11 c5dd0bf8
ip c5dd06f8 sp c5dd0bd8 lr c9221488 pc c9221488
backtrace:
#00 pc 00002488 /data/app/com.json.exampe-iUKPX7Xzx0O-tf5k_EMHjA==/lib/arm/libopencc.so (android_setPlayMode+276)
#01 pc 00000477 /data/data/com.json.example/files/oat/arm/test.odex (offset 0x1f000)
stack:
c5dd0b98 6f87ead0 /data/dalvik-cache/arm/system@framework@boot-core-oj.art
c5dd0b9c ea1dc451 /system/lib/libart.so (_ZN3art12JniMethodEndEjPNS_6ThreadE+12)
c5dd0ba0 6f7e6940 /data/dalvik-cache/arm/system@framework@boot-com.cybertel.service.art
c5dd0ba4 1338b3a8 <anonymous:12c00000>
c5dd0ba8 1324e1e0 <anonymous:12c00000>
c5dd0bac 71c715f5 /system/framework/arm/boot-framework.oat (android.media.AudioSystem.setDeviceConnectionState [DEDUPED]+172)
c5dd0bb0 00430000
c5dd0bb4 005b0000
c5dd0bb8 a4863474
c5dd0bbc a4863474
c5dd0bc0 ffffffff
c5dd0bc4 00000001
c5dd0bc8 ffffffff
c5dd0bcc c9225008 /data/app/com.json.example-iUKPX7Xzx0O-tf5k_EMHjA==/lib/arm/libopensl.so
c5dd0bd0 c9221488 /data/app/com.json.example-iUKPX7Xzx0O-tf5k_EMHjA==/lib/arm/libopensl.so (android_setPlayMode+276)
c5dd0bd4 00000003
#00 c5dd0bd8 00000001
........ ........
#01 c5dd0c00 e644a02c <anonymous:e6434000>
c5dd0c04 00000000
c5dd0c08 00000001
c5dd0c0c 131d5d18 <anonymous:12c00000>
c5dd0c10 00000000
c5dd0c14 00000000
c5dd0c18 00000000
c5dd0c1c 00000000
c5dd0c20 00000000
c5dd0c24 00000000
c5dd0c28 00000000
c5dd0c2c 00000000
c5dd0c30 00000000
c5dd0c34 00000000
c5dd0c38 00000000
c5dd0c3c 00000000
- PID 및 Error 발생한 패키지명 찾기 동일
- backtrace 확인 시 libopencc.so의 setPlayMode API에서 null 로 초기화된 변수를 참조함.
so 라이브러리 문제가 발생하여 tombstone 에러 발생 할 경우 문제가 되는 API는 쉽게 확인이 가능하지만 해당 원인이 발생하는 원인은 프로그램 구현 방식에 따라 다름.
case 1 : JAVA 코드에서 라이브러리 변수를 생성/종료 API를 호출 과정에서 종료된 메모리를 참조
case 2 : JAVA에세 멀티 쓰레드 생성하여 라이브러리스 특정 API 중복 호출중 메모리 참조 오류
tombstone 디버깅 2 보기 : https://json8.tistory.com/66
'Android > Debug' 카테고리의 다른 글
[안드로이드] tombstone 디버깅 2 (0) | 2020.07.05 |
---|