본문 바로가기

Programming/Linux_Platform

gdb 로 Android nexus5 debugging 하기

- GDB server 를 사용해야 하는 이유.

: Android local 에서 gdb 를 직접 실행하면 필요한 symbol 정보 매칭이 안되어서 attach 한 process 가 SIGV error 를 내면서 종료가 됩니다.


- cross compile 로 arm 용 gdb / gdb server 구하기


http://searchme.tistory.com/37


gdb


gdbserver

※ 이 디버깅 방법에서 gdb 는 사용하지 않습니다.



- adb push 로 PC에서 Android device 에 gdbserver 다운로드 하기


# adb push ./gdbserver /data/local/tmp/



- arm-gnu-eabi toolchain 받기

git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6

git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8



버전에 맞게 받으시면 됩니다.

 

4.6 버전에서 아래 애러가 발생한다면 4.8 버전을 쓰시기 바랍니다.


# ./arm-eabi-gdb

./arm-eabi-gdb: error while loading shared libraries: libpython2.6.so.1.0: cannot open shared object file: No such file or directory




- adb shell 로 접속해서 Android target device 에서 디버깅할 process 의 PID 구하기



shell@hammerhead:/data/local/tmp # ps | grep media                             

media     183   1     168208 9684  ffffffff b6e9c58c S /system/bin/mediaserver

media_rw  195   1     3548   192   ffffffff b6f9f2c8 S /system/bin/sdcard

u0_a6     925   181   875804 39792 ffffffff 4007273c S android.process.media



- Androit device 에서 gdb server 실행하기 (1111 port 로 실행)

http://zeph1e.tistory.com/13



shell@hammerhead:/data/local/tmp # ./gdbserver  :1111 --attach 925              

Attached; pid = 925

Listening on port 1111

Remote debugging from host 127.0.0.1



- 디버깅할 pc 에서 adb shell 로 port 포워딩

./gdbserver :1111 --attach 6730


- 다운로드한 arm-eabi toolchain 의 arm-eabi-gdb 를 이용하여 디버깅할 pc 에서 gdb 실행

#~/2_hdisk/storage/utils/toolchain/arm-eabi-4.8/bin/arm-eabi-gdb


- symbal 정보 로딩

set solib-absolute-prefix ~/ssd_project/Nexus5_ng/out/target/product/hammerhead/symbls

set solib-search-path ~/ssd_project/Nexus5_ng//out/target/product/hammerhead/symbols/system/lib

target remote:1111

shared


- 디버깅할 소스코드 위치 지정

dir ~/ssd_project/Nexus5_ng/external/sqlite/dist/


-> 디버깅 시작 !!