안드로이드 개발 질문/답변
(글 수 45,052)
회색님 강의를 따라 Eclipse에서 android phone Emulator를 실행해 봤습니다.
java로 된 부분 외에 android core 부분(C 언어)을 코드 레벨로 따라 가 볼수 없는지요?
break point로 잡을 수 없는지요?
/AndroidS/system/core/adb/ 에 있는 C 언어로 된 부분을 분석 해 보고 싶어서요.
Eclipse 에서 Emulator로 android adb(android debug bridge) 동작 과정을 함수 call flow로 따라 가고 싶어서요.
일단 Emulator에서 확인하고 그다음 실제 device에서
adb에서 linux usb device driver까지 따라 가보고 싶어서요.
회색님 너무 많은 질문드려 죄송하고요, 미리 감사드립니다.^^
java로 된 부분 외에 android core 부분(C 언어)을 코드 레벨로 따라 가 볼수 없는지요?
break point로 잡을 수 없는지요?
/AndroidS/system/core/adb/ 에 있는 C 언어로 된 부분을 분석 해 보고 싶어서요.
Eclipse 에서 Emulator로 android adb(android debug bridge) 동작 과정을 함수 call flow로 따라 가고 싶어서요.
일단 Emulator에서 확인하고 그다음 실제 device에서
adb에서 linux usb device driver까지 따라 가보고 싶어서요.
회색님 너무 많은 질문드려 죄송하고요, 미리 감사드립니다.^^
2010.02.02 23:51:32
c나 c++로 된 natvie app은 Host(ubuntu)에서 usb로 target(단말기)을 연결한 다음 Target의 gdbserver 와 adb port forwarding을 통해서 host(ubuntu)의 gdb나 ddd를 이용하여 디버깅을 할수 있습니다.
아래와 같은 절차를 이용하면 native app을 디버깅 하실수 있습니다
1. Target
1.1 adb shell
1.2 gdbserver Application : port_num
2,Host(ubuntu)
2.1 adb forward tcp:port_num tcp:port_num
2.2 gdb Application / ddd Application
2.3 (gdb) target remote : port_num
수고하세요.
I've cross-compiled gdbserver for Android. This allows gdb to be used to debug native C applications on the emulator. If you want to debug your native C application, follow these steps:
Download gdbserver from here: http://www.billrocks.org/android_libs/bin
Install gdbserver on your emulator:
$ emulator &
$ adb shell
#cd data
#mkdir bin
In another terminal:
$ adb push gdbserver /data/bin
Then, run gdbserver back in the emulator:
# /data/bin/gdbserver 10.0.2.2:1234 [args...]
For example, to debug sshd, I'm running:
#/data/bin/gdbserver 10.0.2.2:1234 /data/bin/sshd -f /data/etc/ssh/sshd_config
Then, back in your other terminal, forward the port, using the telnet interface:
$telnet localhost 5554
Then enter the command:
redir add tcp:1234:1234
In yet a third terminal, run gdb:
$gdb
For example, I run:
$gdb sshd
Then, at the gdb prompt, enter:
(gdb) target remote localhost:1234
Now, set breakpoints, and then continue:
(gdb) b
(gdb) c
For me, sshd segv'ed on the emulator, and gdb put me in the function where it happened.
Happy debugging!