Assert가 걸렸을 때 Symbol들(eg. Function name)이 보이지 않는 이유는 Device에 Install 될 때, Library의 Symbol들을 떼어 버리기 때문이다.
Symbol들을 보기 위해서는 addr2line을 쓰는 방법과 gdb/gdbserver를 쓰는 방법이 있는데, 비교적 사용법이 간단한 addr2line을 사용하는 방법을 알아본다.
사용법은 아래와 같다.
cygwin의 Bash를 띄운 후 아래와 같이 입력하면 된다.
arm-eabi-addr2line.exe -f -e <library name> <address>
-f: Show function names
-e: Set the input file names
만약 아래와 같이 Assert가 발생했다고 하자.
Build fingerprint: XXXX
pid: 1917, tid: 1960 >>> XXXX <<<
signal 11 (SIGSEGV), fault addr 450774f0
r0 ffffffa5 r1 ffec01a4 r2 450774f0 r3 45235310
r4 fffffb00 r5 ff000000 r6 ff000000 r7 000001df
r8 00ff00ff r9 4767fca4 10 4767fcc0 fp 00000780
ip 000000ff sp 4767fac0 lr 80d1c041 pc 80d1c176 cpsr a0000030
#00 pc 0001c176 YYYY.so #01 pc 0003b026 YYYY.so #02 pc 00005aba YYYY.so #03 pc 0000312a YYYY.so #04 pc 0000f1f4 /system/lib/libdvm.so
pid: 1917, tid: 1960 >>> XXXX <<<
signal 11 (SIGSEGV), fault addr 450774f0
r0 ffffffa5 r1 ffec01a4 r2 450774f0 r3 45235310
r4 fffffb00 r5 ff000000 r6 ff000000 r7 000001df
r8 00ff00ff r9 4767fca4 10 4767fcc0 fp 00000780
ip 000000ff sp 4767fac0 lr 80d1c041 pc 80d1c176 cpsr a0000030
#00 pc 0001c176 YYYY.so #01 pc 0003b026 YYYY.so #02 pc 00005aba YYYY.so #03 pc 0000312a YYYY.so #04 pc 0000f1f4 /system/lib/libdvm.so
위에서 PC 값에 적힌, 주소를 Library와 함께 넣어주면 된다.
arm-eabi-addr2line.exe -f -e YYYY.so 0001c176
출력>
[Symbol Name]
??:0
arm-eabi-addr2line.exe -f -e YYYY.so 0003b026
출력>
[Symbol Name]
??:0
주) arm-eabi-addr2line.exe는 NDK의 build\prebuilt\windows\arm-eabi-4.4.0\bin\에 존재한다.
댓글 1개:
잘 보고 갑니다 :-) mj.lee
댓글 쓰기