Android調試工具及方法

轉自:http://www.cnblogs.com/feisky/archive/2010/01/01/1637566.htmlphp

Logcat

Dump一份系統消息的日誌。這些消息包括模擬器拋出錯誤時的堆棧跟蹤。html

Android Log

一個記錄日誌的類,用來將消息寫入模擬器上的日誌文件中。若是你在DDMS上運行logcat的話你能夠就實時查看消息。在你的代碼中加入幾個寫日誌方法的調用。
爲了使用Log類,你只須要調用Log.v()(詳細),Log.d()(debug),Log.i()(information),Log.w()(warning) 或者 Log.e()(error),根據你想得到的日誌信息來選擇相應的方法java

Log.i("MyActivity", "MyClass.getView() — Requesting item number " + position)
你能夠用logcat來讀取這些信息

Traceview

Android能夠保存一個日誌用來記錄被調用的方法以及該方法被調用的次數,經過Traceview你能夠在一個圖形化的界面中查看這個日誌文件。

adb

Android 調試橋(adb)是多種用途的工具,該工具能夠幫助你你管理設備或模擬器的狀態。android

發出Android命令: 你能夠在你的開發機上的命令行或腳本上發佈Android命令,使用方法:shell

adb [-d|-e|-s <serialNumber>] <command>

進入Shell:adb shell瀏覽器

查詢模擬器/設備實例
adb devices 列出模擬器的序列號和狀態服務器

給特定的模擬器/設備實例發送命令
若是有多個模擬器/設備實例在運行,在發佈adb命令時須要指定一個目標實例。 這樣作,請使用-s 選項的命令。在使用的-s 選項是
adb -s <serialNumber> <command>
如:db -s emulator-5556 install helloWorld.apkapp

安裝軟件:
adb install <path_to_apk>工具

從模擬器/設備中拷入或拷出文件
能夠使用adbpull ,push 命令將文件複製到一個模擬器/設備實例的數據文件或是從數據文件中複製。install 命令只將一個.apk文件複製到一個特定的位置,與其不一樣的是,pull 和 push 命令可令你複製任意的目錄和文件到一個模擬器/設備實例的任何位置。
從模擬器或者設備中複製文件或目錄,使用(以下命):
adb pull <remote> <local>
將文件或目錄複製到模擬器或者設備,使用(以下命令)
adb push <local> <remote>
在這些命令中, <local> 和<remote> 分別指通向本身的發展機(本地)和模擬器/設備實例(遠程)上的目標文件/目錄的路徑
下面是一個例子::
adb push foo.txt /sdcard/foo.txt測試

查詢日誌 adb logcat

Stopping the adb Server
在某些狀況下,你可能須要終止Android 調試系統的運行,而後再從新啓動它。 例如,若是Android 調試系統不響應命令,你能夠先終止服務器而後再重啓,這樣就可能解決這個問題.
用kill-server 能夠終止adb server。你能夠用adb發出start-server命令來從新啓動服務器.

設備上調試和測試的設置

Android提供了衆多的設置使你能夠更容易的調試和測試程序。要進入開發設置頁面,在模擬器中轉到Dev Tools > Development Settings。在該設置頁面有如下選項:

  • Debug app:選擇要調試的程序。你不須要設定其關聯至調試器,可是設定這個值有兩個效果:
    • 在調試的時候,若是你在一個斷點處暫停了過長的時間,這個設定會防止Android拋出一個錯誤
    • 這個設定使你能夠選擇「等待調試器」選項,使程序只有在調試器關聯上以後才啓動
  • Wait for Debugger:阻塞所選的程序的加載直到有調試器關聯上,這樣你就能夠在onCreate()中設置斷點,這對於調試一個Activity的啓動進程是很是重要的。當你對該選項進行了更改,任何正在運行的程序的實例都會被終止。你只有在上面的選項中選擇了一個調試程序纔可以選中該選項。你也能夠在代碼中添加waitForDebugger()來實現一樣的功能。
  • Immediately destroy activities:告訴系統一旦一個activity中止了就銷燬該activity(例如當Android釋放內存的時候)。這對於測試代碼onFreeze(Bundle)/onCreate(android.os.Bundle)是很是有用的,不然會比較困難。若是你的程序沒有保存狀態,那麼選擇這個選項極可能會引起不少問題。
  • Show screen updates:對於任何正在被重繪的screen sections都會在其上閃現一個粉紅色的矩形。這對於發現沒必要要的screen繪製是頗有必要的。
  • Show CPU usage:在屏幕上方顯示CPU信息,顯示有多少CPU資源正在被使用。上方紅色條顯示總的CPU使用率,它下方綠色的條顯示CPU用在compositing the screen上的時間。注意:在沒有重啓模擬器以前,一旦你開啓了該功能就不能關閉。
  • Show screen FPS:顯示當前的幀率。這對於查看遊戲達到的總的幀率是很是有用的。注意:在沒有重啓模擬器以前,一旦你開啓了該功能就不能關閉。
  • Show background:當沒有activity screens可見時,顯示一個背景模式。通常是不會出現的,僅僅在Debug的時候會出現。

設定的選項在模擬器重啓以後仍然有效,若是要取消設定的選項,在取消設定之後還要重啓模擬器,才能生效。

重要的調試小提示

快速的堆棧dump

要在模擬器上得到一個堆棧dump,你能夠經過adb shell登入,用「ps」找到你想要的進程,而後「kill -3」,
堆棧跟蹤信息就會記錄到日誌文件中了。

在模擬器屏幕上顯示有用信息

設備上能夠顯示諸如CPU利用率或者對重繪區域的邊緣高亮顯示等有用信息,在開發設置窗口能夠打開或者關閉這些功能。

從模擬器上獲取系統狀態信息(dumpstate)

你能夠經過Dalvik Debug Monitor Service工具來得到dumpstate信息。

從模擬器上獲取程序狀態信息(dumpsys)

你能夠經過Dalvik Debug Monitor Service工具來得到dumpsys信息。

獲取無線鏈接信息

你能夠經過Dalvik Debug Monitor Service工具來得到無線鏈接信息。在Device菜單,選擇「Dump radio state」

日誌記錄跟蹤數據

你能夠在一個activity中經過調用android.os.Debug.startMethodTracing()來用日誌來記錄方法調用和其餘跟蹤數據。

日誌記錄Radio Data

默認狀況下,radio信息是不會記錄在系統中的(由於數據量巨大)。然而,你能夠經過下面的命令來開啓radio記錄
adb shell
logcat -b radio

運行adb

Andoid中自帶了一個叫adb的工具,該工具功能強大,能夠移動並同步文件到模擬器,轉發端口。在模擬器上運行一個UNIX shell。

從模擬器上獲取屏幕截圖

Dalvik Debug Monitor Server (DDMS)能夠從模擬器上獲取屏幕截圖

利用調試幫助類

     Android爲了開發者的方便提供了諸如util.LogDebug等幫助類

命令行運行程序的方法

參考:http://www.javaeye.com/topic/201856  http://www.javaeye.com/topic/149227

進入shell 

引用
C:\Documents and Settings\mawenjian>adb shell


看一下命令的幫助 

引用

# am -help 
am -help 
Error: Unknown command: -help 
usage: am [start|instrument] 
       am start [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] 
                [-c <CATEGORY> [-c <CATEGORY>] ...] 
                [-e <EXTRA_KEY> <EXTRA_VALUE> [-e <EXTRA_KEY> <EXTRA_VALUE> ...] 
                [-n <COMPONENT>] [-D] [<URI>] 
       am instrument [-e <ARG_NAME> <ARG_VALUE>] [-p <PROF_FILE>] 
                [-w] <COMPONENT>


好了,試一下啓動瀏覽器 

引用
# am start -n com.google.android.browser/com.google.android.browser.BrowserActivity 
am start -n com.google.android.browser/com.google.android.browser.BrowserActivity 
Starting: Intent { comp={com.google.android.browser/com.google.android.browser.BrowserActivity} }


ok,成功了 
你們試試下面的命令吧: 

引用

# am start -a android.intent.action.VIEW -d http://mwjian.javaeye.com 
am start -a android.intent.action.VIEW -d http://mwjian.javaeye.com 
Starting: Intent { action=android.intent.action.VIEW data=http://mwjian.javaeye.com } 

# am start -a android.intent.action.CALL -d tel:88888888 
am start -a android.intent.action.CALL -d tel:88888888 
Starting: Intent { action=android.intent.action.CALL data=tel:88888888 } 

# am start -a android.intent.action.ALL_APPS 
am start -a android.intent.action.ALL_APPS 
Starting: Intent { action=android.intent.action.ALL_APPS } 

# am start -a android.intent.action.VIEW geo:0,0?q=shanghai 
am start -a android.intent.action.VIEW geo:0,0?q=shanghai 
Starting: Intent { action=android.intent.action.VIEW data=geo:0,0?q=shanghai }

 

本文參考:Android手冊 www.cnblogs.com/jacktu 萬能的G.cn

相關文章
相關標籤/搜索