Smart Platform/Android
[Android Debugging]gdb & gdbserver setting process
Jack2
2013. 2. 25. 09:00
NDK Debugging in Android ( gdb & gdbserver)
1. NDK 다운로드에서 자신의 운영체제에 맞는 Android NDK 를 다운로드2. NDK 내 gdbserver 및 gdb 경로 확인 ( Windows )= gdbserver =경로 : [NDK 설치경로]/prebuilt/android-arm/gdbserver/= gdb =경로 : [NDK 설치경로]/toolchains/arm-linux-androideabi-4.X/prebuilt/windows/bin/
3. gdbserver 설정안드로이드 디바이스에 gdbserver 파일 전송
안드로이드 디바이스에 올라온 해당 파일 확인.
파일 확인 결과. 실행 권한이 없으므로 chmod 755 gdbserver 명령어를 통해 실행 권한을 부여디버깅 대상 PID(프로세스 아이디) 확인 후# ./gdbserver :[임의의 포트번호] --attach [PID]4. gdb 사용 전 사전작업Android 환경에서 App 이 동작하면 여러가지 라이브러리 파일이 필요하다.이 라이브러리 파일들이 안드로이드 기기의 /system/lib 경로에 존재한다.이 라이브러리 파일들을 원격 gdb 에서도 로딩을 하기 위해 /system/lib 하위에 존재하는 라이브러리 파일들을 가져와야 한다.tar 를 이용해 해당 디렉토리에 존재하는 모든 파일을 압축한 뒤 압축한 파일을 PC 로 전송한다.해당 압축파일을 압축해제원격 gdb 에서 해당 라이브러리 파일 경로를 설정해주어야 하므로라이브러리 파일이 존재하는 경로를 기억하고 있자!!다음으로 Android 에서는 app_process 라는 서비스를 통해 Dalvik VM 을 실행시킨 후 zygote를 생성한다.
5. gdb 설정
현재 안드로이드 디바이스에 있는 gdbserver 의 결과를 PC 로 포워딩 하기위해# adb forward tcp:[임의의 포트번호] tcp:[임의의 포트번호]명령어 입력 후PC에서 [NDK 설치경로]/toolchains/arm-linux-androideabi-4.X/prebuilt/windows/bin/ 에 존재하는 gdb 실행gdb 진입 후 라이브러리 심볼로드 및 접속하기 위해 추가작업을 실행해 주어야 한다.(gbd) set solib-absolute-prefix "PATH": 시스템 /(root) 경로 설정, 모든 공유 라이브러리 앞에 이 옵션이 붙어서 path 를 찾기 때문이다.예를들어, 우리가 가져온 파일이 /system/lib 하위에 있는 공유 라이브러리이므로gdb 를 실행해 줄 때에도 target 과 동일한 환경을 맞추어 주는 것이다.(gdb) set solib-search-path "PATH": shared library(공유 라이브러리)를 찾기 위한 경로 설정(gbd) file "PATH"gdb 에서 아래명령 입력(gdb) target remote :[임의의 포트번호]