1 Android Log
最近遇到一些抓log 的事情弄痹,很多來自網(wǎng)上達(dá)人的分享骡男,加在一起總結(jié)一下:
log文件分為實(shí)時打印的,還有狀態(tài)信息的兩種
??? 實(shí)時打印的主要有:logcat main窗悯,logcat radio瓶逃,logcat events,tcpdump丽已, QXDM Log
??? 狀態(tài)信息的有:adb shell dmesg蚌堵,adb shell dumpstate,adb shell dumpsys沛婴,adb bugreport
實(shí)時log:
adb logcat -b?events?-v time? 打印系統(tǒng)事件的日志吼畏,比如觸屏事件
tcpdump?是很有用的,對于TCP/IP協(xié)議相關(guān)的都可以使用這個來抓嘁灯,
adb shell tcpdump -s 10000 -w /sdcard/capture.pcap泻蚊,
比如抓mms下載的時候的UA profile,browser上網(wǎng)的時候丑婿,使用proxy的APN下載性雄,streaming的相關(guān)內(nèi)容包括UA profile等没卸。
狀態(tài)log:
???????? 其實(shí)一個就夠了,那就是bugreport(命令adb bugreport>bugreport.log)秒旋。
???????? 里面包含有dmesg约计,dumpstate和dumpsys;
?dmesg(命令adb shell dmesg > ldmesg_kernel.log)是kernel的log滩褥,凡是跟kernel相關(guān)的病蛉,比如driver出了問題(相機(jī),藍(lán)牙瑰煎,usb铺然,啟動,等等)
?dumpstate是系統(tǒng)狀態(tài)信息酒甸,里面比較全魄健,包括手機(jī)當(dāng)前的內(nèi)存信息、cpu信息插勤、logcat緩存沽瘦,kernel緩存等等;
?dumpsys這個是關(guān)于系統(tǒng)所有進(jìn)程Process的內(nèi)容都在這個里面农尖,adb shell dumpsys 這個命令還有更詳盡的用法析恋,
???????? 比如adb shell dumpsys meminfo system是查看system這個process的內(nèi)存信息。
???????? dumpsys [options]
?????????????? meminfo ? 顯示內(nèi)存信息
?????????????? cpuinfo ???? 顯示CPU信息
?????????????? account ??? 顯示accounts信息
?????????????? activity 顯示所有的activities的信息
?????????????? window ??? 顯示鍵盤盛卡,窗口和它們的關(guān)系
?????????????? wifi ?? 顯示wifi信息
通過adb logcat/bugreport可以實(shí)時的查看系統(tǒng)的log助隧,以及系統(tǒng)的狀態(tài)信息;
如何將Log存儲下來滑沧,保存當(dāng)時系統(tǒng)運(yùn)行的情況呢并村?
可以通過一些腳本或者執(zhí)行可執(zhí)行程序來保存log信息,以便分析問題滓技;
2 抓取實(shí)時log?
intmain(intargc,char*argv[])
{
? ? ……
? ? //抓取main logcharpath[] ="/xxx/xxx/app_main.log";
? ? sprintf(cmd,"logcat -v time > %s",path);
? ? fd = open(path, O_WRONLY|O_TRUNC|O_CREAT,0777);system(cmd);//radio log? ? ……
? ? sprintf(cmd,"logcat -b radio -v time > %s",path);system(cmd);//kernel? ? ……
? ? sprintf(cmd,"cat /proc/kmsg > %s",path);system(cmd);//bluetoolth logsprintf(cmd,"hcidump -w %s","/data/bt.log");system(cmd);? ? ……}
3 抓取狀態(tài)log
intmain(intargc,char*argv[])
{
? ? //panic log 需要判斷/proc/apanic_console是否存在sprintf(cmd,"cp -R %s %s",from_dir,to_dir);system(cmd);//anr log /data/anr/sprintf(cmd,"cp -R %s %s",from_dir,to_dir);system(cmd);//tombstones log /data/tombstones/modem重啟復(fù)位等sprintf(cmd,"cp -R %s %s",from_dir,to_dir);system(cmd);//mdm log /data/tombstones/mdm/modem重啟復(fù)位sprintf(cmd,"cp -R %s %s",from_dir,to_dir);system(cmd);
……
}
panic log:
它表示Linux kernel走到了一個不知道該怎么走下一步的狀況哩牍,
http://wenku.baidu.com/view/519c8009844769eae009ed50
tombstone log:????
當(dāng)系統(tǒng)發(fā)生tombstone的時候,kernel首先會上報一個嚴(yán)重的警告信號(signal),上層接收到之后令漂,
進(jìn)程的調(diào)試工具會把進(jìn)程中當(dāng)時的調(diào)用椣ダィ現(xiàn)場保存起來,并在系統(tǒng)創(chuàng)建了data/tombstones目錄后把異常時的進(jìn)程信息寫在此目錄里面叠必,
開發(fā)者需要通過調(diào)用棧來分析整個調(diào)用流程來找出出問題的點(diǎn)外潜。
?http://www.eoeandroid.com/thread-206358-1-1.html
4 Runtime 可執(zhí)行程序
編譯成可執(zhí)行程序,當(dāng)然在實(shí)際使用中需要一些控制參數(shù)挠唆。
代碼里如何執(zhí)行這些可執(zhí)行程序:
???????? 在底層可以通過system();
???????? 在Java層Runtime.getRuntime().exec();
例如:
???????? String BIN_PATH = "/system/bin/catch_log";
???????? Runtime.getRuntime().exec(BIN_PATH + " -x 1");
???????? Runtime.getRuntime().exec("/system/bin/cat? "+path);
???????? Runtime.getRuntime().exec("su -c chmod 777 /data/glad.txt");
???????? Runtime.getRuntime().exec("/system/bin/sh /data/test.sh");
Android Runtime使得直接調(diào)用底層Linux下的可執(zhí)行程序或腳本成為可能
比如Linux下寫個測試工具处窥,直接編譯后apk中通過Runtime來調(diào)用
或者寫個腳本,apk中直接調(diào)用玄组,省去中間層或者JNI滔驾;
?? 參考文檔:http://blog.csdn.net/zmyde2010/article/details/6123987
5 diag_mdlog
???????? 這是高通提供的抓取qxdm log的東東谒麦。
???????? 既包括AP端得,也包括BP端的哆致;或者跟選擇端口有關(guān)系,8064ap和modem端口獨(dú)立绕德;
???????? 代碼位置:\vendor\qcom\proprietary\diag\mdlog\
???????? 使用diag_mdlog這個可執(zhí)行程序來抓取log
?????????????????? 需要Diag.cfg文件來配置過濾項,選擇需要的Log信息摊阀。在使用前必須放置一個Diag.cfg文件耻蛇。
?????????????????? Diag.cfg文件可以用QXDM生成;可以通過F12胞此,F(xiàn)iltered View /Config 來生成Diag.cfg
???????? 這個程序一次只能執(zhí)行一個臣咖,可以用kill -9 PID 將其強(qiáng)制結(jié)束
6 抓取Ap 端 memory dump
???????? 高通qpst工具M(jìn)emory Dump App
???????? 要在downloader模式
???????? 需要修改的nv項:
?????????????????? 905 0
?????????????????? 4399 1
???????? 或者使用emmc進(jìn)入downloader模式。
???????? 打開連接手機(jī)漱牵, Get Regions夺蛇,選擇需要保存的Regin,SaveTo選擇一個文件夾酣胀,確定即可
???????? 注意:這個路徑下不能有中文刁赦,必須是英文的路徑