DDMS는 안드로이드 장치나 에뮬레이터의 내부작동 및 상태를 모니터링 하거나 에뮬레이터에서 통화/SMS/위치정보등을 가상으로 설정하여 개발시에 특정한 상황등을 설정할 수 있는 장치 디버깅 툴입니다. 앞으로 진행하게될 내용을 통하여 DDMS의 유용한 기능을 살펴보도록 하겠습니다.
우선 DDMS의 실행방법을 살펴보도록 하겠습니다.
첫번째 실행방법은 커맨드 창에서 android sdk가 설치된 폴더 아래에 tools 폴더로 이동하여 ddms파일을 실행하면 단독프로그램으로 DDMS를 실행할수 있습니다.
보통은 앞의 방법과 같이 단독으로 실행하지 않고 Eclipse의 ADT플러그인을 통하여 Eclipse와 통합된 환경으로 작업을 할 수 있습니다.
이클립스 를 통한 DDMS를 실행하려면 이클립스 메뉴에서 [Window] -> [Open Perspective] -> [Other ...]를 클릭하고
DDMS Perspective를 선택하여 DDMS 환경으로 전환할 수 있습니다.
DDMS Perspective서 포함하는 각 부분의 기능입니다.
Device - DDMS로 추적중인 장치와 장치내에서 동작하고 있는 프로세스의 목록을 보여줍니다.
Emulator Control - 에뮬레이터에 통화/문자/위치정보등의 조작을 가상으로 처리할 수 있습니다.
Heap - 장치의 메모리 소비 상태를 나타냅니다.
Threads - 실행중인 스레드 정보를 표시합니다.
Allocation Tracker - 메모리의 상세정보를 표시합니다.
File Exploror - 장치 내부의 파일구조를 표시합니다.
LogCat - 프로그램의 디버깅용 로그정보를 출력합니다.
Device창을 통해서 DDMS와 연결된 장치와 장치에서 동작중인 프로세스의 목록을 확인할 수 있습니다.
아래에서 emulator-5554는 현제 연결된 장치의 이름이며(에뮬레이터), 하위로 현재 장치에서 실행중인 기본 프로세스의 목록이 보입니다.
(Debug Proccess)
디버그하 려는 프로세스를 선택하고 버튼을 클릭하면 해당 프로세스를 디버깅하게됩니다.
작동하는 프로세스가 이클립스 프로젝트 안에 열려있야만 소스 디버깅이 가능합니다.
보통은 위의 버튼을 사용하기 보다 이클립스의 디버그 기능을 이용 소스 디버깅을 수행하게 됩니다.
(Update Heap)
해당 프로세스의 Heap Memory 정보를 확인할 수 있도록 설정합니다.
프 로세스 목록에서 위의 버튼을 클릭하면 Heap탭에 힙 멤모리 사용에 대한 통계 수치가 나타납니다.
Cause CG버튼을 통하여 프로세스에 강제로 가비지컬렉션을 수행하여 전후의 메모리 누수 여부를 어느정도 가늠할 수도 있습니다.
(Dump HPROF file)
힙덤프 정보 파일을 추출해 냅니다.
sdk의 tools아래에 sdkhprof-conv.exe를 통해 표준 HPROF파일로 변환한 뒤에,
jhat이나 Eclipse Memoy Analyzer Tool(MAT) 등의 힘 덥프 분석툴로 상세한 메모리 상태를 점검 할 수 있다고 합니다.
(Cause GC)
해당 프로세스에게 가비지콜랙션을 요청합니다.
(Update Threads)
프로세스 내의 현재 스래드 활동 정보를 갱신하여 보여줍니다.
프로세스를 선택하고 버튼을 클릭하면 현재 프로세스가 사용하고 있는 스레드 정보를 Threads 탭에서 확인 할 수 있습니다.
(Start Method Profiling)
프로세스의 특정시간동안에 활동한 메소드 점유정보를 기록/분석합니다.
녹음기로 음성을 녹음하듯이 실행중인 프로세스의 일정 시간동안 사용한 메소드의 점유정보를 리포팅할 수 있습니다.
(Stop Process)
종료하고자 하는 프로세스를 선택하고 버튼을 클릭하면 선택된 프로세스를 강제로 종료할 수 있습니다.
단말장치에 프로세스의 문제로 실행중인 프로세스의 종료가 어려울경우 유용하게 사용할 수 있습니다.
(Screen Capture)
선택된 장치의 현재화면을 캡쳐합니다.
안드로 이드폰에서 전화통화, 문자(SMS) 전송, 위치정보 등의 이벤트 발생을
개 발시에 에뮬레이터에서도 처리할수 있도록 에뮬러이터를 가상으로 제어하는 기능을 담당합니다.
전화 걸기: 아래와 같은 방법으로 프로그램 수행중에전화가 걸려온 상황을 연출할 수 있습니다.
Imcoming number에 전화번호(숫자,#,-)를 입력.
Voice 선택후 [Call]을 누르면 에뮬레이터에서 입력한 전화번호로 부터 전화가 걸려온 상태가 되어 전환됨.
전화를 받습니다.
Emulator Control의 [Hang Up]을 클릭하면 전화를 끊은 상태로 전환됨.
문자 전송: 전화걸기와 마찬가지로 문자메세지를 받은 상황을 연출할 수 있습니다.
Imcoming number에 전화번호(숫자,#,-)를 입력.
SMS를 선택하고 Message에 문자메세지를 입력.
[Send] 버튼을 클릭하면 메율레이터로 문자 메세지가 전송됩니다.
위치 설정: 에뮬레이터를 지구상의 특정위치로 지정하는 기능으로 에뮬레이터로 위치기반 서비스등을 테스트할 때 사용할 수 있습니다.
가장 간단한 방법은 Longitude와 Latitude의 값을 입력 후 [Send]버튼을 클릭하여 현재 위치를 가상으로 전송합니다.
Google Map 등의 위치기반 프로그램에서 확인하면 입력한 가상의 위치로 표시가 됩니다.
KML파일은 구글맵의 내지도에 접속하여 여러 지점의 위치를 저장한 후 링크기능으로 KML파일을 다운받을 수 있습니다.
그 파일을 [KML]탭에서 로딩하면 에뮬레터에서 사용할 위치리스트를 만들어주는이 이 리스트에 항목을 선택하여 전송하거나
시간에 따라 자동으로 위치가 변하게 지정할 수도 있습니다. http://tkstory.textcube.com/3 이 곳에 잘 설명이 되어 있습니다.
공식 사이트 : http://code.google.com/intl/ko-KR/apis/kml/documentation/index.html
포맷 규격 문서: http://code.google.com/intl/ko-KR/apis/kml/documentation/whatiskml.html
번역 포맷 규격 문서: http://heomin61.googlepages.com/whatiskml
GPX 파일도 KML과 비슷난 용도로 이동한 위치의 정보를 저장하는 범용 데이터 포맷입니다.
인터넷 검색을 통하여 셈플GPX파일과 파일의 구조를 검색할 수 있습니다.
공식 사이트 : http://www.topografix.com/gpx.asp
포맷 규격 문서 : http://www.topografix.com/gpx/1/1/
Heap
Device탭에서 Update Heap을 설정한 프로세스의 Heap탭을 통해서 해당 프로세스의 메모리 사용 통계치를 확인할 수 있습니다.
좀더 자세한 메모리 정보는 Allocation Tracker탭을 분석하거나 HPROF 덤프파일을 확인하여 살펴볼 수 있습니다.
Heap탭의 [Cause GC] 버튼을 클릭하면 해당 프로세스에게 가비지컬랙션을 요청하게 되는데, 이때 메모리가 해제되거나 증가되는
상황을 통해 메모리 누수 시점을 어느정도 추측할 수 있습니다. 하지만 특정 객체나 배열의 메모리 할당 상태는 확인이 불가능합니다.
Thread
Device탭에서 Update Threads 버튼을 클릭하면 아래와 같이 Threads 탭에서 해당 프로세스의 쓰래드 목록과 상태를 확인 할 수 있습니다.
Allocation Tracker
Update Heap을 통한 방법보다 더욱 상세한 메모리 할당상태를 확인할 수 있습니다. [Start Tracking] 버튼을 누르면 [Get Allocations] 버튼이
활성화 되어집니다. [Get Allocations] 버트을 사용하여 원하는 시점에 메모리 할당 정보를 얻을 수 있습니다. 작업이 끝나면 [Stop Tracking]
버튼으로 종료해 주면 됩니다. (프로세스의 성능이 떨어지지 않도록)
File Explorer
폰이나 에뮬레이터의 파일을 PC에 저장하거나(Pull), PC의 파일을 단말기로 전송(Push) 할 수 있습니다.
또한 단말기의 파일구조를 확인할 수도 있습니다.
(Pull file from the device) - 장치에 보이는 파일을 컴퓨터로 가지고 옵니다.
(Push a file onto the device) - 컴퓨터의 파일을 장치로 올립니다.
LogCat은 안드로이드의 로그를 확인하는 기능을 합니다.
http://www.androidpub.com/android_dev_info/764 <== 여기에 너무 자세일 설명되어 있어서 상세한 설명은 생략합니다.
verbose / debug / info / warm / error
Log.v()/Log.d()/Log.i()/Log.w()/Log.e()명령으로 출력된 내용을 구분하여 조회합니다.
Create Filter / Edit Filter / Delete Filter
Log Filter 를 추가/수정/삭제하여 필터를 추가합니다.
화면에는 GameView라는 필터이름으로 Log.메소드의 첫번째 인자로 들어가는 태그명을 기준으로 로그를 필터링 합니다.
화면에 내요으로 필터를 저장하면 LogCat 패널에 GameView라는 탭이 추가되고 태그명이 GameView인것만 필터링 합니다.
Clear Log
화면에 보이는 로그를 비웁니다.
[android]안드로이드 로그뷰어(LogViewer for android) (0) | 2013.03.31 |
---|---|
[Android] ADB 사용법 (0) | 2012.06.12 |
[Android] git 관련 command (0) | 2011.08.01 |
[Android] 안드로이드 로그 (0) | 2011.07.31 |
[eclipse]failed to create the java virtual machine error 발생 시 대처법 (0) | 2011.07.25 |
댓글 영역