android的除錯技巧,尤其是nativec等底層程式
在Android的應用開發中,我們會用到各種程式碼除錯;其實在Android的開發之後,我們可能會碰到一些隨機的問題,如cpu過高,記憶體洩露等,我們無法簡單的進行程式碼除錯,我們需要一個系統日誌等等,下面我把握工作中碰到的幾個常用命令和方法給大家演示實踐一下。
1.logcat命令
這個命令最簡單常用,可檢視幫助,我不多說,如果需要列印時間,加引數-v time
1 |
adb
logcat -v time
|
2.bugreport命令
這個命令也非常簡單,但是在實際應用中非常有用,會有從開機之後詳細的dumpsys,dumpstate和logcat資訊,是一份完整的日誌記錄。對分析使用者行為,異常資訊,系統狀態有很大的參考作用。一般我們會把bugreport匯出到電腦上分析。
1 |
adb
bugreport > xxx. log
|
我再次強調,bugreport裡面包含豐富的系統和使用者資訊,它是其他很多命令輸出的結果的記錄,非常有用。
3.dumpsys命令
這個檢視系統資訊,用的還是比較多的.
1 2 3 4 5 6 7 |
dumpsys
[options]
meminfo
顯示記憶體資訊
cpuinfo
顯示CPU資訊
account
顯示accounts資訊 activity
顯示所有的activities的資訊
window
顯示鍵盤,視窗和它們的關係
wifi
顯示wifi資訊
|
例如檢視某個程式記憶體資訊:
?1 2 |
#檢視應用com.tianxia.test的記憶體使用情況
adb
shell dumpsys meminfo com.tianxia.test
|
效果圖如下:
裡面的資訊很有價值,尤其對於分析記憶體洩露,記憶體溢位都有極大的作用。
4.top命令
這個檢視cpu資訊太方便了。
1 |
top
-m 5 -t
|
我們看看效果圖,其中按cpu大小列出5個程序列表。
com.tianxia.test的cpu過高,會導致手機發燙。同時利用這個資訊,可以監控應用cpu的使用,以調整優化程式碼。
5.配置檔案local.prop
目前網上沒有查到local.prop的配置使用,工作中本人只使用過如下:
1 |
log .tag.SQLiteStatements=VERBOSE log .tag.SQLiteTime=VERBOSE
|
把上述文字加到/data/local.prop中,如果沒有這個檔案自行建立。然後重啟手機,就能看到每個應用詳細的查詢資料庫的sql語句資訊,對於除錯資料庫,分析和優化資料庫sql異常非常有用。
6.分析手機發燙
下面我們來實踐一個例子,手機發燙太厲害,怎麼找出問題?
首先我們寫一個程式com.tianxia.test,死迴圈,核心程式碼如下:
1 2 3 4 5 6 7 8 |
@Override
public
|