




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Androidlog系統(tǒng)light2011/11/20Android系統(tǒng)10g抓取,實(shí)現(xiàn)原理分析概述本文檔主要是供Android開發(fā)人員使用,特別是Framework開發(fā)。因?yàn)镕ramework中95%以上的問題都是靠分析10g解決的,所以開發(fā)人員必須對(duì)android整個(gè)10g系統(tǒng)十分清楚。什么問題抓什么log,使用什么工具抓Log,如何分析log,如何在代碼中添加log.二DDMSlog關(guān)于ddms是如何工作的和ddms的詳細(xì)功能,見下面androidsdk中文檔詳細(xì)介紹:F:02Android01_SDKGingerbread2.3docs-2.3_r01-linuxguidedevelo
2、pingtoolsddms.htmlDdms工具中打印log的幾個(gè)菜單如下:Device->ShowprocessstatusDevice->DumpdevicestateDevice->DumpappstateDevice->DumpradiostateDevice->Runlogcat1、Showprocessstatus菜單等效于在adbshell下執(zhí)行adbshellps%命令,該命令打印出進(jìn)程的詳細(xì)信息,如下:USERPIDPPIDVSIZERSSWCHANPCNAMEroot10268180c009b74c0000875cS/init(u:2,s:37
3、1)root2000c004e72c00000000Skthreadd(u:0,s:1)root3200c003fde800000000Sksoftirqd/0(u:0,s:0)root4200c004b2c400000000Sevents/0(u:0,s:39)root5200c004b2c400000000Skhelper(u:0,s:0)root6200c004b2c400000000Ssuspend(u:0,s:0)USER用戶名,即用戶所在組PID進(jìn)程ID(ProcessID)PPID父進(jìn)程的進(jìn)程ID(ParentProcessid)VSZ進(jìn)程所使用的虛擬內(nèi)存的大小(VirtualS
4、ize)RSS進(jìn)程使用的駐留集大小或者是實(shí)際內(nèi)存的大小,Kbytes字節(jié)。WCHAN進(jìn)程正在睡眠的內(nèi)核函數(shù)名稱;該函數(shù)的名稱是從/root/system.map文件中獲得的ExploringProcessesYoucanseetheoutputofps-XforaspecificVMbyselectingDevice>Shemenubar.2、Dumpdevicestate菜單等效于執(zhí)行/system/bin/dumpstate/proc/self/fd/0等效于執(zhí)行adbshelldumpstate命令TorundumpstatefromDalv
5、ik,selectDevice>Dhemenubar.3、Dumpappstate菜單等效于執(zhí)行adbshelldumpsys命令輸出android服務(wù)狀態(tài)信息,即輸出服務(wù)中dump函數(shù)的log.4、Dumpradiostate菜單等效于執(zhí)行adbshellcat/data/logs/radio命令ExamineRadioStateBydefault,radiostateisnotoutputduringastandardlogcat(itisalotofinformation).Toseeradioinformation,eitherclickDev
6、ice>Dumpradiostate.orrunlogcatasdescribedinLoggingRadioInformation.5、Runlogcat菜單等效于執(zhí)行adblogcatTorundumpsys(logcat)fromDalvik,selectDevice>Rhemenubar.總結(jié):除了Runlogcat-菜單是實(shí)時(shí)輸出設(shè)備中的log外,其他菜單都是輸出設(shè)備中緩存的log三AdbLogAndroidsdk文檔中對(duì)adb的介紹見下:F:02Android01_SDKGingerbread2.3docs-2.3_r01-linuxguided
7、evelopingtoolsadb.html在adb1.0.26版本共有2條命令打印log,如下:adblogcat<filter-spec>-Viewdevicelogadbbugreport-returnallinformationfromthedevicethatshouldbeincludedinabugreport.Adblogcat常用命令logcat-c清除已有10g信息logcat-bmain顯示主緩沖區(qū)的loglogcat-bradio顯示無線緩沖區(qū)的loglogcat-bevents顯示事件緩沖區(qū)的loglogcat-ffilename將10g保存到指定的文件中
8、,例如logcat-bradio-f/data/radio.log比較常用的是顯示時(shí)間:logcat-vtime&logcat-g查看緩沖區(qū)的大小logcat-gmainlogcat-gradiologcat-geventslogcat打印/dev/log設(shè)備下的三個(gè)文件radio,events,main數(shù)據(jù)logcat默認(rèn)是輸出main緩沖區(qū)的10g控制日志輸出格式日志信息包括了許多元數(shù)據(jù)域包括標(biāo)簽和優(yōu)先級(jí)??梢孕薷娜罩镜妮敵龈袷剑钥梢燥@示出特定的元數(shù)據(jù)域??梢酝ㄟ^-v選項(xiàng)得到格式化輸出日志的相關(guān)信息.briefDisplaypriority/tagandPIDoforigina
9、tingprocess(thedefaultformat).process-DisplayPIDonly.tagDisplaythepriority/tagonly.thread-Displayprocess:threadandpriority/tagonly.rawDisplaytherawlogmessage,withnoothermetadatafields.timeDisplaythedate,invocationtime,priority/tag,andPIDoftheoriginatingprocess.longDisplayallmetadatafieldsandseparate
10、messageswithablanklines.當(dāng)啟動(dòng)了logcat,你可以通過-v選項(xiàng)來指定輸出格式:adblogcat-v<format>此夕卜,adbshellcmd,cmd為/system/bin目錄下抓10g的可執(zhí)行程序,如dumpsys,dumpstateAdb下的log命令:AdblogcatAdbbugreportAdbshelldumpsysAdbshelldumpstateAdbshelldmesg/導(dǎo)出當(dāng)前緩存的kernellogAdbshellkmsgcat/實(shí)時(shí)查看kernellog其他查看系統(tǒng)當(dāng)前信息命令A(yù)dbshellps/查看系統(tǒng)進(jìn)程信息,可以加很多
11、有用信息Adbshellpm/查看package相關(guān)信息Adbshellam/啟動(dòng)apk應(yīng)用Adbshellsetprop/設(shè)置系統(tǒng)屬性Adbshellgetprop/查看所有系統(tǒng)屬性AdbshellrebootAdbshellkill/通過進(jìn)程ID殺死指定的進(jìn)程Adbshelltop/查看當(dāng)前運(yùn)行進(jìn)程信息Adbshellvmstat/查看虛擬機(jī)信息Adbshellbootanimation/播放開機(jī)動(dòng)畫Adbshelldf/查看分區(qū)信息Adbshellmonkey/跑自動(dòng)化測試用例四保存在手機(jī)的Log1、手機(jī)dropbox默認(rèn)路徑:/data/system/dropbox/實(shí)現(xiàn)機(jī)制:log文
12、件什么場景產(chǎn)生?Log文件分析:2、手機(jī)anr日志默認(rèn)路徑:/data/anr/實(shí)現(xiàn)機(jī)制:log文件什么場景產(chǎn)生?Log文件分析:4、tombstones路徑:/data/tombstoneslog文件什么場景產(chǎn)生?Log文件分析:五如何實(shí)現(xiàn)后臺(tái)抓Log如:adblogcat-vtime-r1024-n16-f/sdcard/bugreports/applogcat-log六10g執(zhí)行程序?qū)崿F(xiàn)機(jī)制1、LogcatLogCat是在文件system/core/logcat/logcat.cpp中實(shí)現(xiàn)的。從Logger設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)知道,Log的讀取是阻塞的操作,亦即,有數(shù)據(jù)可用,讀出數(shù)據(jù);否則,讀
13、操作會(huì)被BLOCK相應(yīng)的讀進(jìn)程也會(huì)被掛起等待。下面看應(yīng)用程序LogCat中如何實(shí)現(xiàn)讀的,這可能需要不斷回頭與寫操作和驅(qū)動(dòng)實(shí)現(xiàn)結(jié)合來看??淳唧w實(shí)現(xiàn)之前,先看一個(gè)logcat中定義的重要的結(jié)構(gòu)體log_device_t。其中的重要的成員在后面用到的時(shí)候再具體解釋。Android的Logcat命令詳解的命令參數(shù)-b<buffer>知道,logcat是可以通過參數(shù)來指定對(duì)哪個(gè)buffer(main/radio/event)進(jìn)行操彳的。Logcat的b參數(shù)解析的地方,是通過傳遞進(jìn)來的參數(shù)(main/radio/event)來創(chuàng)建了一個(gè)上面的結(jié)構(gòu)變量,而這些結(jié)構(gòu)通過log_device_t.n
14、ext鏈接起來因?yàn)閘ogcat可能會(huì)同時(shí)操作多個(gè)Buffer,而read()會(huì)阻塞讀取進(jìn)程,對(duì)其他Buffer的讀取就不能進(jìn)行,所以這里用select()來判斷可讀取的Buffer。2、BugreportI:00_AndriodSourceandroid-gingerbread-srcframeworksbasecmdsbugreport#include<cutils/properties.h>#include<cutils/sockets.h>intmain(intargc,char*argv)charbuffer65536;inti,s;/*startthedump
15、stateservice*/property_set("ctl.start","dumpstate");/啟動(dòng)dumpstate服務(wù)/*socketwillnotbeavailableuntilservicestarts*/for(i=0;i<10;i+)s=socket_local_client("dumpstate",ANDROID_SOCKET_NAMESPACE_RESERVED,SOCK_STREAM);if(s>=0)break;/*tryagainin1second*/sleep(1);if(s<0)f
16、printf(stderr,"Failedtoconnecttodumpstateservicen");exit(1);while(1)intlength=read(s,buffer,sizeof(buffer);if(length<=0)break;fwrite(buffer,1,length,stdout);)close(s);return0;)原理:啟動(dòng)dumpstate服務(wù),通過socket連接dumpstate服務(wù),然后從socket中不斷讀取dumpstate側(cè)的log打印出來通過代碼分析和實(shí)際對(duì)比分析,發(fā)現(xiàn)bugreport輸出的10g和dumpstat
17、e輸出的10g完全一致。3、DumpstateI:00_AndriodSourceandroid-gingerbread-srcframeworksbasecmdsdumpstate輸出的信息包括:1、版本信息2、系統(tǒng)狀態(tài)信息:CPU內(nèi)存進(jìn)程系統(tǒng)屬性等3、Logcat信息4、Dumpsys輸出的所以services信息5、ANRlog信息6、Dmesgkerne110g信息會(huì)運(yùn)行下面命令輸出10grun_command("CPUINFO",10,"top","-n","1","-d","
18、;1","-m","30","-t",NULL);run_command("PROCRANK",20,"procrank",NULL);run_command("SYSTEMLOG",20,"logcat","-v","time","-d","*:v",NULL);run_command("EVENTLOG",20,"logcat&quo
19、t;,"-b","events","-v","time","-d","*:v",NULL);run_command("RADIOLOG",20,"logcat","-b","radio","-v","time","-d","*:v",NULL);run_command("NETWORKINTERFACES&q
20、uot;,10,"netcfg",NULL);run_command("KERNELLOG",20,"dmesg",NULL);run_command("VOLDDUMP",10,"vdc","dump",NULL);run_command("SECURECONTAINERS",10,"vdc","asec","list",NULL);run_command("PROCESSES&quo
21、t;,10,"ps","-P",NULL);run_command("PROCESSESANDTHREADS",10,"ps","-t","-p","-P",NULL);run_command("LIBRANK",10,"librank",NULL);run_command("FILESYSTEMS&FREESPACE",10,"df",NULL);run_comman
22、d("LASTRADIOLOG",10,"parse_radio_log","/proc/last_radio_log",NULL);run_command("DUMPSYS",60,"dumpsys",NULL);4、DumpsysI:00_AndriodSourceandroid-gingerbread-srcframeworksbasecmdsdumpsysconstsize_tN=services.size();if(N>1)/firstprintalistofthecurrent
23、servicesaout<<"Currentlyrunningservices:"<<endl;for(size_ti=0;i<N;i+)sp<IBinder>service=sm->checkService(servicesi);if(service!=NULL)aout<<""<<servicesi<<endl;for(size_ti=0;i<N;i+)sp<IBinder>service=sm->checkService(servicesi)
24、;if(service!=NULL)if(N>1)aout<<""""<<endl;aout<<"DUMPOFSERVICE"<<servicesi<<":"<<endl;interr=service->dump(STDOUT_FILENO,args);/調(diào)用每個(gè)service中的dump()方法輸出logif(err!=0)aerr<<"Errordumpingserviceinfo:("<&
25、lt;strerror(err)<<")"<<servicesi<<endl;elseaerr<<"Can'tfindservice:"<<servicesi<<endl;輸出10g信息代碼如上,結(jié)合實(shí)際10g分析,dumpsys輸出系統(tǒng)服務(wù)dump信息七其他方法技巧1、通過設(shè)置系統(tǒng)屬性打開10g開關(guān)如有如下打印log的代碼:if(Log.isLoggable(TAG,Log.DEBUG)Log.d(TAG,"RedirectrequestedbutnoLocati
26、on"+"specified.");我們只需要通過設(shè)置系統(tǒng)屬性就可以打印出這個(gè)log,而不用修改代碼??梢酝ㄟ^setprop命令或修改p來達(dá)到目的。具體見Log.java中的介紹:/* Checkstoseewhetherornotalogforthespecifiedtagisloggableatthespecifiedlevel.* ThedefaultlevelofanytagissettoINFO.Thismeansthatanylevelaboveandincluding* INFOwillbelogged.Beforeyoumakea
27、nycallstoaloggingmethodyoushouldchecktosee* ifyourtagshouldbelogged.Youcanchangethedefaultlevelbysettingasystemproperty:* 'setproplog.tag.<YOUR_LOG_TAG><LEVEL>'* WhereleveliseitherVERBOSEDEBUG,INFO,WARN,ERROR,ASSERTorSUPPRESS.SUPRESSwill* turnoffallloggingforyourtag.Youca
28、pfilethatwiththe* followinginit:* 'log.tag.<YOUR_LOG_TAG>=<LEVEL>'* andplacethatin/data/p.* paramtagThetagtocheck.* paramlevelTheleveltocheck.* returnWhetherornotthatthisisallowedtobelogged.* throwsIllegalArgumentExceptionisthrownifthetag.len
29、gth()>23.* /publicstaticnativebooleanisLoggable(Stringtag,intlevel);1. 查看當(dāng)前堆棧1)功能:在程序中加入代碼,使可以在logcat中看到打印出的當(dāng)前函數(shù)調(diào)用關(guān)系2)方法:newException(aprinttrace").printStackTrace();2. MethodTracing1)功能:用于熱點(diǎn)分析和性能優(yōu)化,分析每個(gè)函數(shù)占用的CPU時(shí)間,調(diào)用次數(shù),函數(shù)調(diào)用關(guān)系等2)方法:a)在程序代碼中加入追蹤開關(guān)importandroid.os.Debug;,android.os.Debug.startM
30、ethodTracing("/data/tmp/test");/先建/data/tmp目錄,/被追蹤的程序段android.os.Debug.stopMethodTracing();b)編譯,運(yùn)行后,設(shè)備端生成/data/tmp/test.trace文件c)把trace文件復(fù)制到PC端$adbpull/data/tmp/test.trace./d)使用android自帶工具分析trace文件$ANDROID_SRC/out/host/linux-x86/bin/traceviewtest.trace此時(shí)可看到各個(gè)函數(shù)被調(diào)用的次數(shù)CPU占用率等信息e)使用android自帶工
31、具分析生成調(diào)用關(guān)系類圖$apt-getinstallgraphviz#安裝圖片相關(guān)軟件$ANDROID_SRC/out/host/linux-x86/bin/dmtracedump-gtest.pngtest.trace此時(shí)目錄下生成類圖test.png3)注意trace文件生成與libdvm模塊DEBUG版本相沖突,所以此方法只適用于對(duì)非DEBUG版本模擬器的調(diào)試,否則在分析trace文件時(shí)會(huì)報(bào)錯(cuò)3. HProf(HeapProfile)1)功能:用于java層面的內(nèi)存分析,顯示詳細(xì)的內(nèi)存占用信息,指出可疑的內(nèi)存泄漏對(duì)象2)方法:a)在代碼中加入dump動(dòng)作importandroid.os.
32、Debug;importjava.io.IOException;,tryandroid.os.Debug.dumpHprofData("/data/tmp/input.hprof");/先建/data/tmp目錄catch(IOExceptionioe)b)把hprof文件復(fù)制到PC端$adbpull/data/tmp/input.hprof./c)使用命令hprof-conv把hprof轉(zhuǎn)成MAT識(shí)別的標(biāo)準(zhǔn)的hprof$ANDROID_SRC/out/host/linux-x86/bin/hprof-convinput.hprofoutput.hprofd)使用MAT工具
33、看hprof信息下載MAT工具:/mat/downloads.php用工具打開output.hprof3)注意:此工具只能顯示java層面的,而不能顯示C層的內(nèi)存占用信息4. SamplingProfile(android2.0上版本使用)1)功能log中每隔N毫秒對(duì)當(dāng)前正在運(yùn)行的函數(shù)取樣,并輸出到2)在代碼中加入取樣設(shè)定importdalvik.system.SamplingProfilerSamplingProfilesp=SamplingProfiler.getInstance();sp.start(n);/n為設(shè)定每秒采樣次數(shù)sp.logSnapshot(sp.snapshot();sp.shutDown();它會(huì)啟一個(gè)線程監(jiān)測,在logcat中打印信息5. 用發(fā)系統(tǒng)信號(hào)的方式取當(dāng)前堆棧情況和內(nèi)存信息1)原理dalvik虛擬機(jī)對(duì)SIGQUIT和SIGUSR1信號(hào)進(jìn)彳亍處理(dalvik/vm/SignalCatcher.c),分別完成取當(dāng)前堆棧和取當(dāng)前內(nèi)存情況的功能2)用法a) $chmod777/data/anr-R#把a(bǔ)nr目錄權(quán)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度訂制尺寸訂框安裝合同
- 2025年度物流企業(yè)合作投資與知識(shí)產(chǎn)權(quán)保護(hù)協(xié)議
- 二零二五年度旅游企業(yè)法人景區(qū)經(jīng)營權(quán)轉(zhuǎn)讓合同
- 2025年度股權(quán)激勵(lì)協(xié)議書-員工股權(quán)激勵(lì)與股權(quán)激勵(lì)計(jì)劃實(shí)施合同范本
- 二零二五年度紅薯種植技術(shù)培訓(xùn)與收購服務(wù)合同
- 關(guān)于業(yè)務(wù)合作的函件示例
- 家裝設(shè)計(jì)行業(yè)項(xiàng)目執(zhí)行標(biāo)準(zhǔn)
- 幼兒園教育服務(wù)合作框架協(xié)議
- 初中力學(xué)基礎(chǔ)實(shí)驗(yàn)課教案
- 公司辦公管理規(guī)章制度手冊
- 2025天津市安全員-B證考試題庫附答案
- 二年級(jí)下冊數(shù)學(xué)口算題-可打印
- 公司信息化安全規(guī)章制度及操作手冊
- 新風(fēng)施工合同
- 2025-2030年園藝修剪機(jī)器人行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 福建省南平市2024-2025學(xué)年九年級(jí)上學(xué)期期末語文試題(解析版)
- 人教版四年級(jí)數(shù)學(xué)下冊第四單元測試卷(含答案)
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑工程測量》模擬練習(xí)試題庫(含答案)
- 2023年中國綜合社會(huì)調(diào)查調(diào)查手冊
- 2024-2027年中國網(wǎng)絡(luò)安全評(píng)估行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略研究報(bào)告
- 失智老年人照護(hù)X證書制度試點(diǎn)工作養(yǎng)老護(hù)理職業(yè)和失智老人照護(hù)員工種的發(fā)展講解
評(píng)論
0/150
提交評(píng)論