본문 바로가기
IT Tech/Mobile

[펌][안드로이드] 애플리케이션 프로세스에 직접 debugger 붙이기

by _><- 2016. 4. 9.
반응형

manifest.xml 에서 debuggable 설정 

 

adb forward tcp:8000 jdwp:171

->pid 171 process 관련 debug정보를 tcp port 8000으로 포워딩

 

 

출처 : http://ecogeo.tistory.com/265

 

 



프로세스에 디버거 붙이는 작업을 자동화하기

어쨋든 디버거 붙이는 과정은 가급적 스크립트로 만들어두고 자동으로 실행시키는 것이 좋습니다.

 

▶ 타겟(에뮬레이터)에서 해당 애플리케이션을 시작

am(Activity Manager) 명령어를 이용합니다. 타겟에서 지정된 액티비티를 디버그 모드로 시작하는 명령형식은 다음과 같습니다.

 

am start -D -n <package-name>/<package-name>.<class-name> 

 

자동으로 해당 액티비티 프로세스의 디버깅 포트가 8700 포트로 포워딩되며 만약 8700 포트로 붙는 디버거가 없으면 액티비티는 디버거가 붙을 때까지 대기합니다. 다음은 Contacts 네이티브 애플리케이션의 주소록 목록화면 액티비티 띄우는 예제입니다.

 

$ adb shell am start -D -n com.android.contacts/.ContactsListActivity

 


▶ 이클립스 DDMS에서 해당 프로세스를 선택 

이클립스 DDMS를 보지 않고 방금 띄운 프로세스의 디버깅 포트를 알아내는 것이 핵심입니다. 디버깅 포트는 이렇게 알아낼 수 있습니다.

(1) 해당 프로세스가 마지막에 뜬 프로세스인 경우

adb jdwp | tail -1

 

(2) 프로세스의 이름을 알고 있는 경우

 

# ps| grep 프로세스명 | awk '{print $2}'
# 다음은 프로세스명이 android.process.acore인 경우 예제
$ adb shell ps | grep android.process.acore | awk '{print $2}'

 

이제 리모트 디버깅 실행설정에서 설정해둔 8700 포트를 이렇게 알아낸 포트로 포워딩하면 됩니다.

 

 

# 먼저 위에서 알아낸 디버깅 포트를 $DEBUG_PORT 변수에 저장합니다
$ adb forward tcp:8700 jdwp:$DEBUG_PORT

 


 

반응형

'IT Tech > Mobile' 카테고리의 다른 글

[이클립스] 에뮬레이터에서 한글이 안보이면..  (0) 2016.04.09
[함수] findViewById  (0) 2016.04.09
Droidbox 툴사용  (0) 2016.04.09
eclipse의 DDMS로 앱 메모리 영역 분석  (0) 2016.04.09
service call 목록 검색  (0) 2016.04.08