- GDB server 를 사용해야 하는 이유.
: Android local 에서 gdb 를 직접 실행하면 필요한 symbol 정보 매칭이 안되어서 attach 한 process 가 SIGV error 를 내면서 종료가 됩니다.
- cross compile 로 arm 용 gdb / gdb server 구하기
http://searchme.tistory.com/37
※ 이 디버깅 방법에서 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 로 실행)
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/
'Programming > Linux_Platform' 카테고리의 다른 글
logcat 사용법 정리 (0) | 2015.09.30 |
---|---|
wrtie 비교 O_DIRECT and no-delay-alloc mount option (0) | 2014.08.04 |
[linux][platform] O_DIRECT file open, read, write example (0) | 2014.07.29 |
[linux platform] LD_PRELOAD 를 이용한 android 에서의 library 교체 (0) | 2014.06.26 |
현재 프로세스의 이름 출력, print current process name (0) | 2014.06.24 |