总结调试过程中怎么去抓log
開發(fā)調(diào)試中的辦法非常多,LOG是其中重要的一個(gè)方法,一些常見的LOG的抓取辦法(主要針對(duì)QUALCOMM平臺(tái),未經(jīng)詳細(xì)整理):
1.ADB查看或保存kernel的啟動(dòng)LOG:
kernel log: adb shell dmesg > d:\kerneltestlog.txt
tips :dmesg -n 8 ? ? ? ? ? ? ? //設(shè)置log的等級(jí)
#define KERN_EMERG"<0>"/* system is unusable*/
#define KERN_ALERT"<1>"/* action must be taken immediately*/
#define KERN_CRIT"<2>"/* critical conditions*/
#define KERN_ERR"<3>"/* error conditions*/
#define KERN_WARNING"<4>"/* warning conditions*/
#define KERN_NOTICE"<5>"/* normal but significant condition*/
#define KERN_INFO"<6>"/* informational*/
#define KERN_DEBUG"<7>"/* debug-level messages*/
dmesg -s 81920 ? ? ? ? ? ? ?//設(shè)置LOG的Buffer,默認(rèn)的buffer是8192
2.smem log:
? ? 1>、用trace32。trace32無疑是強(qiáng)大的,幾乎可以做任何debug的事情,有高通代碼的兄弟可以在\AMSS\products \76XX\tools\debug目錄下找到smemlog.cmm和smem_log.pl這兩個(gè)文件,可以dump出log.
Run “do tools\debug\smemlog.cmm” from Trace32
Run “perl smem_log.pl > smemlog.txt”
? ? 2>、沒有trace32的兄弟也不要灰心,google為我們提供了強(qiáng)大的adb工具。命令如下:
? ? adb shell
? ? mkdir /data/debug
? ? mount -t debugfs debugfs /data/debug
? ? cd /data/debug/smem_log
? ? cat dump_sym
? ?可以給大家看一下抓下來的部分log
? ?
3.各種log(實(shí)際也包括第1種kernel的啟動(dòng)日志):
很多人經(jīng)常搞不清楚各種日志文件的作用,什么時(shí)候抓這些文件,其實(shí)如果你分不清楚的話
? ? ? ? ? ? ? ?最好一起抓了,至少你要分清楚有哪些日志文件需要抓。
? ? log文件分為實(shí)時(shí)打印的,還有狀態(tài)信息的兩種
實(shí)時(shí)打印的主要有:logcat main,logcat radio,logcat events,tcpdump,還有高通平臺(tái)的還會(huì)有QXDM日志
? ? 狀態(tài)信息的有:adb shell dmesg,adb shell dumpstate,adb shell dumpsys,adb bugreport
? ? 講解一下各自作用:
? ? 通過DDMS抓的其實(shí)跟用dos批處理抓的一樣都是logcat的日志文件,ddms抓的通常是main緩存中的,就是應(yīng)用程序打印的日志文件。不過 ddms好處在于能夠?qū)崟r(shí)看到帶有顏色的,如果是用dos批處理只能重定向到文件,到抓完之后才能夠看到,不是實(shí)時(shí)的。
? ? DDMS是調(diào)試應(yīng)用的最重要的一個(gè)LOG工具了。
? ? adb logcat -b main -v time>app.log ?打印應(yīng)用程序的log
? ? adb logcat -b radio -v time> radio.log 打印射頻相關(guān)的log,SIM STK也會(huì)在里面,modem相關(guān)的ATcommand等,當(dāng)然跟QXDM差的很遠(yuǎn)了。
? ? adb logcat -b events -v time ?打印系統(tǒng)事件的日志,比如觸屏事件。。。
? ? tcpdump 是很有用的,對(duì)于TCP/IP協(xié)議相關(guān)的都可以使用這個(gè)來抓,adb shell tcpdump -s 10000 -w /sdcard/capture.pcap,比如抓mms下載的時(shí)候的UA profile,browser上網(wǎng)的時(shí)候,使用proxy的APN下載,streaming的相關(guān)內(nèi)容包括UA profile等。
? ? 最后是高通平臺(tái)的QXDM,不管是不是Android,只要使用高通芯片,都會(huì)對(duì)它很熟悉,當(dāng)然了,不是高通的芯片就不用提它了。這個(gè)不多講,內(nèi)容豐富,射頻,電話,上網(wǎng),...凡是高通提供的解決方案,這個(gè)都可以抓。
? ? 狀態(tài)信息:其實(shí)一個(gè)就夠了,那就是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,啟動(dòng),等等吧)。 dumpstate是系統(tǒng)狀態(tài)信息,里面比較全,包括手機(jī)當(dāng)前的內(nèi)存信息、cpu信息、logcat緩存,kernel緩存等等。adb shell dumpsys這個(gè)是關(guān)于系統(tǒng)service的內(nèi)容都在這個(gè)里面,這個(gè)命令還有更詳盡的用法,比如db shell dumpsys meminfo system是查看system這個(gè)process的內(nèi)存信息。
還有其他的比如PV的log,一般都是開發(fā)人員自己寫的,可能讓你放到sd卡里面,其他的不足或需要補(bǔ)充的期望您的指導(dǎo)。
? ?
4.查看用戶空間的WAKELOCK:
cat /sys/power/wake_lock
cat /proc/wakelocks
5.MODEM端的LOG最主要的是QXDM,這個(gè)用QUALCOMM平臺(tái)的人都知道;
手機(jī)在MODEM端crash時(shí)的QXDM LOG的獲取通過如下辦法
crash F3 log:
To get F3 trace from Trace32
1>.Run recover_f3.cmm or getf3trace.cmm with Trace32 connected or the Trace32 Simulator when the appropriate ELF/ramdump is loaded
2>.Run “perl FormatTrace32F3Trace.pl trace0001.txt > f3.txt”; this generates a nicer looking f3.txt than raw trace0001.txt
To get F3 trace from trace data stored to EFS
1>.Get the file of F3 saving from EFS by using QPST EFS Explorer
err_f3_index00.F3for MSM6xxx
apps_err_f3_index00.f3, modem_err_f3_index00.F3for MSM7xxx
2>.Run recover_f3.cmm or process_efs_trace_file.cmm
3>.Run “perl FormatTrace32F3Trace.pl trace0001.txt > f3.txt”
test 1>.run trace32 simulate,load elf,do do recover_f3.cmm
2>.perl FormatT32F3Trace.pl f3tokens.txt msg_hash.txt > f3log.txt ? ?(Linux,windows should intall perl.)(QSRMessageHash.qsr as msg_hash.txt)
上面都是直接可以使用的LOG獲取辦法;另外還有一些LOG的獲取辦法需要自己稍微修改,只列舉幾個(gè)我曾經(jīng)使用過的例子。
1.LCD,這個(gè)是在bootloader使用的。
? ? ? 在MODEM或Android的APPSBL里面可以直接寫LOG到LCD,這個(gè)需要自己轉(zhuǎn)換字庫(kù)點(diǎn)陣到位圖,還有位圖到LCD的畫屏。
? ? ? 在Linux的kernel也可以指定console到LCD。直接查看kernel的啟動(dòng)LOG。
2.FLASH文件系統(tǒng),這個(gè)使用當(dāng)然必須在文件系統(tǒng)OK后。這個(gè)我是在USB失效時(shí),或者遇到抓取一些不能使用USB條件的LOG:
? ? ? ?MODEM端可以寫LOG文件到EFS。
? ? ? ?linux端可以寫LOG文件到SD卡。
3.串口。這個(gè)我也是把linux kernel的console指定到qualcomm的hs uart2上,抓取kernel的啟動(dòng)日志的
總結(jié)
以上是生活随笔為你收集整理的总结调试过程中怎么去抓log的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android7.1默认背光亮度及编译调
- 下一篇: 如何使用adb命令发送keyevent