android調(diào)試工具集_第1頁(yè)
android調(diào)試工具集_第2頁(yè)
android調(diào)試工具集_第3頁(yè)
android調(diào)試工具集_第4頁(yè)
android調(diào)試工具集_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、An droid開(kāi)發(fā)an droid調(diào)試工具集【轉(zhuǎn)】網(wǎng)摘,收藏,編輯2010-08-11 09:54 by HalZhang, 285 visits,1. 查看當(dāng)前堆棧1)功能:在程序中加入代碼,使可以在 logcat中看到打印出的當(dāng)前函數(shù)調(diào)用關(guān)系2)方法:new Exception( “ print trace”S)taCnTrace();2. MethodTrac ingCPU時(shí)間,調(diào)用次數(shù),函數(shù)調(diào)用1)功能:用于熱點(diǎn)分析和性能優(yōu)化,分析每個(gè)函數(shù)占用的2)方法:a)在程序代碼中加入追蹤開(kāi)關(guān)1:import android.os.Debug;2: 3:android.os.Debug.sta

2、rtMethodTracing(“/data/tmp/test ” ); / 先建/data/tmp 目錄4:/被追蹤的程序段5:android.os.Debug.stopMethodTracing();b)編譯,運(yùn)行后,設(shè)備端生成/data/tmp/test.trace 文件c)把trace文件復(fù)制到PC端$ adb pull /data/tmp/test.trace ./ d)使用an droid自帶工具分析trace文件$ $ANDROID_SRC/out/host/li nu x-x86/bi n/traceview test.trace此時(shí)可看到各個(gè)函數(shù)被調(diào)用的次數(shù)CPU占用率等信息

3、e)使用an droid自帶工具分析生成調(diào)用關(guān)系類圖$ apt-get in stall graphviz #安裝圖片相關(guān)軟件$ANDROID_SRC/out/host/li nu x-x86/bi n/dmtracedump -g test.p ng test.trace此時(shí)目錄下生成類圖test.p ng3)注意trace文件生成與libdvm模塊DEBUG版本相沖突,所以此方法只適用于對(duì)非DEBUG版本模擬器的調(diào)試,否則在分析trace文件時(shí)會(huì)報(bào)錯(cuò)3. HProf (Heap Profile)1) 功能:用于java層面的內(nèi)存分析,顯示詳細(xì)的內(nèi)存占用信息,指出可疑的內(nèi)存泄漏對(duì)象2) 方法

4、:a) 在代碼中加入 dump動(dòng)作1:import android.os.Debug;2:import java.io .I OException;3:4:try 5:android.os.Debug.dumpHprofData( “/data/tmp/input.hprof ” ); / 先建/data/tmp 目錄6: catch (IOException ioe) 7:b) 把hprof文件復(fù)制到 PC端$ adb pull /data/tmp/i nput.hprof ./c) 使用命令hprof-conv 把hprof轉(zhuǎn)成 MAT識(shí)別的標(biāo)準(zhǔn)的 hprof $ $ANDROID_SRC

5、/out/host/linux-x86/bin/hprof-conv input.hprof output.hprofd)使用MAT工具看 hprof信息下載MAT工具: /mat/downloads.php用工具打開(kāi)output.hprof3)注意:此工具只能顯示java層面的,而不能顯示C層的內(nèi)存占用信息4. SamplingProfile (android 2.0上版本使用)1) 功能每隔N毫秒對(duì)當(dāng)前正在運(yùn)行的函數(shù)取樣,并輸出到log中2) 在代碼中加入取樣設(shè)定1:import dalvik.system.SamplingProfiler2: 3

6、:SamplingProfile sp = SamplingProfiler.getlnstance();4:sp.start(n);/ n 為設(shè)定每秒采樣次數(shù)5:sp.lo gSnapshot(sp.snapshot();6: 7:sp.shutDown();它會(huì)啟一個(gè)線程監(jiān)測(cè),在logcat中打印信息5. 用發(fā)系統(tǒng)信號(hào)的方式取當(dāng)前堆棧情況和內(nèi)存信息1)原理,分別完dalvik 虛擬機(jī)對(duì) SIGQUIT 和 SIGUSR1 信號(hào)進(jìn)行處理(dalvik/vm/SignalCatcher.c)成取當(dāng)前堆棧和取當(dāng)前內(nèi)存情況的功能2)用法a) $ chmod 777 /data/anr -R # 把

7、anr目錄權(quán)限設(shè)為可寫(xiě)$ ps # 找到進(jìn)程號(hào)$ kill -3 進(jìn)程號(hào) # 發(fā)送 SIGQUIT 信號(hào)給該進(jìn)程,此時(shí)生成 trace 信息$ cat /data/anr/traces.txt功能實(shí)現(xiàn):遍歷 thread list(dalvik/vm/Thread.c:dvmDumpAllThreadEx() ,并打印當(dāng)前函 數(shù)調(diào)用關(guān)系 (dalvik/vm/interp/Stack.c:dumpFrames()b) $ chmod 777 /data/misc -R$ ps # 找到進(jìn)程號(hào)$ kill -10 進(jìn)程號(hào) # 發(fā)送 SIGQUIT 信事信號(hào)給該進(jìn)程,此時(shí)生成 hprof 信息$

8、ls /data/misc/*.hprof此時(shí)生成 hprf 文件,如何使用此文件,見(jiàn)第二部分 (HProf)注意: hprof 文件都很大,注意用完馬上刪除,以免占滿存儲(chǔ)器6. logcat 及原理1) android.util.Log 利用printin 的標(biāo)準(zhǔn)java輸出詞句,并加前綴 1/V/D .2) dalvik 利用管道加線程的方式,先利用 dup2 把 stdout 和 stderr 重定向到管理中(vm/StdioConverter.c:dvmstdioConverterStartup),然后再啟動(dòng)一個(gè)線程從管道另一端讀出內(nèi)容 (dalvik/vm/StdioConverte

9、r.c:stdioconverterThreadStart(),使用 LOG 公共工具(system/core/liblog/logd_write.c: _android_log_print()輸出到 /dev/log/* 中去3) logcat 通過(guò)加不同參數(shù)看 /dev/log/ 下的不同輸入信息# logcat -b main顯示主緩沖區(qū)中的信息# logcat -b radio顯示無(wú)線緩沖區(qū)中的信息# logcat -b events 顯示事件緩沖區(qū)中的信息7. jdwp(java debug wire protocol)及原理1) 虛擬機(jī)(設(shè)備端) 在啟動(dòng)時(shí)加載了 Agent JDW

10、P 從而具備了調(diào)試功能。在調(diào)試器端( PC端)通過(guò) JDWP 協(xié)議與設(shè)備連接,通過(guò)發(fā)送命令來(lái)獲取的狀態(tài)和控制 Java 程序的執(zhí)行。JDWP 是通過(guò)命令( command )和回復(fù)( reply )進(jìn)行通信的。2) JDK 中調(diào)試工具 jdb 就是一個(gè)調(diào)試器, DDMS 也提供調(diào)試器與設(shè)備相連。3) dalvik為JDWP提供了兩種連接方式:tcp方式和adb方式,tcp方式可以手工指定端口,adb 方式自動(dòng)設(shè)定為 8700 端口,通常使用 DDMS 調(diào)試就是通過(guò) adb 方式8. monkey1) monkey 是一個(gè) android 自帶的命令行工具。 它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流, 實(shí)

11、現(xiàn)對(duì) 正在開(kāi)發(fā)的應(yīng)用程序進(jìn)行壓力測(cè)試。2) 方法在設(shè)備端打開(kāi) setting 界面$ adb shell# monkey -p com.android.settings -v 500 此時(shí)可以看到界面不斷被切換9. 其它小工具具體見(jiàn) android.os.Debug 中提供的工具1) 取毫微秒級(jí)的時(shí)間,用于計(jì)算時(shí)間 threadCpuTimeNanos()2) 統(tǒng)計(jì)兩點(diǎn)間的內(nèi)存分配情況 startAllocCounting() stopAllocCounting() getGlobalAllocCou nt()get3)打印當(dāng)前已load的classgetLoadedClassCo un t()printLoadedClasses()它需要打開(kāi)NDEBUG 功能才能

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論