android抓取各種log的方法

1、logcat

?(四類log buffer是main,radio,system,events)

adb wait-for-device logcat??

adb logcat -v time > logcat.txt ? ? ?//默認是-b main -b system

adb logcat -v time -b main ? ? ? ?//main log

adb logcat -v time -b radio?//radio log

adb logcat -v time -b system?//system log

adb logcat -v time -b events

2、anr log

adb pull /data/anr

3、tombstone log

adb pull /data/tombstones

4、core log

adb pull? /data/log/core

5、開機log

adb shell dmesg > dmesg.txt

6、logcatch

adb pull /data/logcatch

7、qxdm log

adb pull /sdcard/logs

8、 hprof log

在分析app 時,我們通常需要分析app 的java heap 資料,如分析java 的memory leak, 追查heap

中相關(guān)變量情況等。

在android 中抓取app 的hprof 操作方式有下面幾種:

第一種方式: 使用am 命令

adb shell am dumpheap {Process} file

如 adb shell am dumpheap com.android.phone /data/anr/phone.hprof

adb pull /data/anr/phone.hprof

第二種方式: 使用DDMS 命令

在DDMS 中選擇對應(yīng)的process, 然后在Devices 按鈕欄中選擇Dump Hprof file, 保存即可

第三種方式: 通過代碼的方式

在android.os.Debug 這個class 中有定義相關(guān)的抓取hprof 的method.

如: public static void dumpHprofData(String fileName) throws IOException;

這樣即可在代碼中直接將這個process 的hprof 保存到相對應(yīng)的文件中,注意這個只能抓取當(dāng)時的

process.

如果想抓其他的process 的hprof, 那么就必須通過AMS 幫忙了。

可以先獲取IActivityManager 接口,然后調(diào)用它的dumpheap 方法。具體的代碼,大家可以參考

frameworks/base/cmds/am/src/com/android/commands/am/am.java 中的調(diào)用代碼

抓取回hprof 后,就可以用hprof-conv 命令將DVM 格式的hprof 轉(zhuǎn)換成標準的java 命令的hprof

hprof-conv in.hprof out.hprof

然后使用如MAT 之類的工具進行具體的分析

9、bugreport

adb bugreport > bugreport.txt

10、kernel log(只有從當(dāng)前時間起的很少的log)

cat proc/kmsg > kmsg.txt

11、其他

adb shell dumpstate //各類信息,比如進程信息,內(nèi)存信息,進程是否異常,kernnel的log等

adb shell dumpcrash

adb shell dumpsys//查詢所有service的狀態(tài)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容