2011. 3. 25. 01:25

ADB 디버깅 로그

안드로이드의 ADB 동작 원리를 파악하기 위해 윈도우즈에서 빌드를 하였습니다. MinGW 를 이용했고, 이클립스에서 디버깅되도록 세팅을 했습니다. 

헌데 막상 디버깅을 해보니 문제점이 있었습니다. 정작 알고자 하는 기능은  fork 되는 자식 프로세스에서 하게 되어 있는데 윈도우즈에서는 gdb 로 fork 된 프로세스를 디버깅할 수 없었습니다. 

linux 에서는 몇가지 옵션을 설정하면 되는 것 같았는데, 윈도우즈에서는 (제가 몰라서인지...) 가능하지 않더군요.

그동안의 삽질을 뒤로하고 다른 일을 하다가...

다시 adb 의 동작 원리를 분석해야할 때가 왔습니다. 다음 3가지 사항을 고려해야 하는데...

1. 진입점에 키 입력을 받을 때까지 기다리도록 하여 fork시  정지시켜 놓고 attach 를 하느냐...
2. adb start-server 를 입력하면 fork 를 하는가? -> 하지 않는다면 그걸로 ㅇㅋ
3. 디버깅을 하기 위해 linux 에서 빌드하느냐... 시간이...ㄷㄷ

이 중에 어떻게 되려나요~

업데이트!

결국 윈도우즈에서 디버깅하는 방법은 성공하지 못했습니다. 그것보다 더 쉬운 방법을 찾았습니다. 제가 알고자 했던 내용은 adb 데몬과 adb host 간의 통신 프로토콜 이었습니다. 이는 사실 adb 를 tcp 를 이용하여 연결한 후 Wireshark 와 같은 도구로  모니터링을 해보면 간단한 문제였습니다. 

캡처된 패킷과 adb 소스, ddmlib 소스등을 뒤적거려 보니 궁금했던 점이 모두 해결되더군요. 혹시 저와 같이 adbd 와 adb host 간의 프로토콜을 파악하시려는 분은 패킷 분석을 이용하시면 보다 쉽게 이해하실 수 있으실 겁니다.