在Android的應用開發中,我們會用到各種代碼調試;其實在Android的開發之后,我們可能會碰到一些隨機的問題,如cpu過高,內存泄露等,我們無法簡單的進行代碼調試,我們需要一個系統日志等等,下面我把握工作中碰到的幾個常用命令和方法給大家演示實踐一下。
1.logcat命令
這個命令最簡單常用,可查看幫助,我不多說,如果需要打印時間,加參數-v time
adb logcat -v time
2.bugreport命令
這個命令也非常簡單,但是在實際應用中非常有用,會有從開機之后詳細的dumpsys,dumpstate和logcat信息,是一份完整的日志記錄。對分析用戶行為,異常信息,系統狀態有很大的參考作用。一般我們會把bugreport導出到電腦上分析。
adb bugreport > xxx.log
我再次強調,bugreport里面包含豐富的系統和用戶信息,它是其他很多命令輸出的結果的記錄,非常有用。
3.dumpsys命令
這個查看系統信息,用的還是比較多的.
里面的信息很有價值,尤其對于分析內存泄露,內存溢出都有極大的作用。
4.top命令
這個查看cpu信息太方便了。
top -m 5 -t
我們看看效果圖,其中按cpu大小列出5個進程列表。
com.tianxia.test的cpu過高,會導致手機發燙。同時利用這個信息,可以監控應用cpu的使用,以調整優化代碼。
5.配置文件local.prop
目前網上沒有查到local.prop的配置使用,工作中本人只使用過如下:
log.tag.SQLiteStatements=VERBOSE log.tag.SQLiteTime=VERBOSE
把上述文本加到/data/local.prop中,如果沒有這個文件自行創建。然后重啟手機,就能看到每個應用詳細的查詢數據庫的sql語句信息,對于調試數據庫,分析和優化數據庫sql異常非常有用。
6.分析手機發燙
下面我們來實踐一個例子,手機發燙太厲害,怎么找出問題?
首先我們寫一個程序com.tianxia.test,死循環,核心代碼如下:
top -m 5 -t
一看是com.tianxia.test占用85%的cpu,原來是這家伙在搗鬼。進程ID是644,這個后面我們有用。
(2).分析發燙的應用進程在干嘛
需要用到linux下的strace命令,但是android是沒有集成這個命令的,android版本的下載地址:
http://benno.id.au/android/strace
下載完成后,上傳到手機中:
我們adb push strace /system/bin,在模擬器上是上傳到/system/bin會報out of memory錯誤,我們也可以上傳到/data目錄下,如果沒有執行權限,還需要chmod 777 strace.
strace命令有很多參數,直接執行strace會顯示使用說明:
其中-p參數輸入的就是進程號,第一步中我們找到com.tianxia.test的進程ID是644,我們看看這個應用占用這么高的cpu在干嘛?
strace -p 644
輸出如下:
它的系統調用一直是gettimeofday,一直輸出這個,顯然哪里一定進入死循環了,而且是獲取時間的死循環,然后結合logcat和代碼,定位這段代碼(就是前面我們給出的那段代碼了)解決這個bug。
7.采集手機的cpu運行情況.
有時使用日志我們很難針對性的獲取我們想要的信息,我們可能需要寫一些最簡單的腳步放在手機里面執行。
如監控cpu占用的記錄cpu_log.sh:
8.采集某個應用的內存數據
這個實踐和上面的腳本類似,只是命令不一樣我另外單獨列出來,因為這個有時候很有用。
比如,我們要采集com.tianxia.test的內存使用情況,分析它是不是會內存泄露,腳步類似:
新聞熱點
疑難解答
圖片精選