處理應(yīng)用的bug,這是每個(gè)程序員的基本功,實(shí)際項(xiàng)目中天天都有各式各樣的bug,因此學(xué)會(huì)如何使用Logcat杆兵、Android Lint以及Android Studio內(nèi)置的調(diào)試器就非常有必要啦。
異常與棧跟蹤
寫(xiě)代碼嘛崎脉,一個(gè)不注意就把程序?qū)懕祭才】龋挥脫?dān)心,展開(kāi)Android DDMS工具窗口囚灼。上下滑動(dòng)LogCat窗口滾動(dòng)條骆膝,就能看到整片紅色的異常或錯(cuò)誤信息灶体。若看不到阅签,可嘗試選擇LogCat的No Filters過(guò)濾器項(xiàng)。還有可以調(diào)整Log Level位Error蝎抽,讓系統(tǒng)只輸出嚴(yán)重問(wèn)題日志政钟。
如圖,隨意寫(xiě)個(gè)空指針錯(cuò)誤樟结,LogCat就打印出了異常報(bào)告养交,告訴我們異常及其棧追蹤,我們可以從異常語(yǔ)句直接跳轉(zhuǎn)到源代碼出錯(cuò)的對(duì)應(yīng)行上瓢宦,找出奔潰原因碎连,加以修正。
如果發(fā)生應(yīng)用崩潰的設(shè)備沒(méi)有與計(jì)算機(jī)連接驮履,日志信息也不會(huì)全部丟失鱼辙。設(shè)備會(huì)將最近的日志保存到日志文件中(保存時(shí)間取決具體設(shè)備廉嚼,一般十分鐘之內(nèi)有保證)。
記錄棧跟蹤日志
這個(gè)方式就是打印日志了倒戏,因?yàn)橛械臅r(shí)候代碼出現(xiàn)問(wèn)題怠噪,不一定就會(huì)造成奔潰了,就可以在需要的地方杜跷,利用Log.d(...)方式來(lái)打印相應(yīng)的信息傍念,來(lái)檢查方法是否正常調(diào)用,并且數(shù)據(jù)值是否跟預(yù)計(jì)一致了葱椭。大量的日志輸出也容易導(dǎo)致LogCat窗口信息混亂難讀捂寿,因此可以在查看的時(shí)候也可以過(guò)濾掉一些暫時(shí)不需要查看的日志口四,或者直接選擇TAG孵运,就只打印某一些log日志了。
設(shè)置斷點(diǎn)
打斷點(diǎn)也是程序員調(diào)試程序的常用方法,斷點(diǎn)會(huì)在斷點(diǎn)設(shè)置行的前一行代碼出停止運(yùn)行更卒,然后我們可以逐行檢查代碼等孵,看看接下來(lái)到底發(fā)生了什么。
有篇文章專(zhuān)門(mén)講了Android Studio一些各種小技巧锈玉,當(dāng)然包含了調(diào)試技巧爪飘,很棒的文章。
地址:http://jaeger.itscoder.com/android/2016/02/14/android-studio-tips.html
小結(jié)一句:打印Log日志的優(yōu)點(diǎn)是拉背,在同一日志記錄中可以看到多處的棧跟蹤信息师崎;缺點(diǎn)是,必須學(xué)習(xí)如何添加日志記錄方法去团,重新編譯抡诞、運(yùn)行應(yīng)用并跟蹤排查應(yīng)用問(wèn)題穷蛹。相對(duì)而言,斷點(diǎn)調(diào)試的方法更為方便昼汗,當(dāng)然不同場(chǎng)景下肴熏,打印日志會(huì)更加清晰、方便尋找解決問(wèn)題線(xiàn)索顷窒,比如說(shuō)一個(gè)循環(huán)中蛙吏。
Android特有的調(diào)試工具——Android Lint
Android Lint是Android應(yīng)用代碼的靜態(tài)分析器,它是無(wú)需代碼運(yùn)行就能檢查代碼錯(cuò)誤的的特殊程序鞋吉,憑著對(duì)Android框架知識(shí)的掌握鸦做,Android Lint深入檢查代碼,找出編譯器無(wú)法發(fā)現(xiàn)的問(wèn)題谓着。
選擇Analyze -> Inspect Code...菜單項(xiàng)手動(dòng)運(yùn)行Lint
選擇Whole project泼诱。然后Android Studio會(huì)立即運(yùn)行Lint和其他一些靜態(tài)分析器開(kāi)始分析代碼。
檢查完畢赊锚,所有的潛在問(wèn)題會(huì)按類(lèi)別列出治筒。
R類(lèi)問(wèn)題——有時(shí)候資源編譯錯(cuò)誤莫名其妙的出現(xiàn),若遇到此類(lèi)問(wèn)題牲平,可嘗試如下操作
- 重新檢查資源文件中的XML文件的有效性(某個(gè)布局的拼寫(xiě)有可能錯(cuò)誤堤框,拼寫(xiě)規(guī)范要遵守)
- 清晰項(xiàng)目(選擇Build -> Clean Project,Android Studio會(huì)重新編譯整個(gè)項(xiàng)目纵柿,消除錯(cuò)誤蜈抓,建議經(jīng)常進(jìn)行深度項(xiàng)目清理)
- 使用Gradle同步項(xiàng)目(若修改了build.gradle配置文件,就需要同步更新項(xiàng)目的編譯設(shè)置藐窄。選擇Tool -> Android -> Sync Project with Gradle Files菜單項(xiàng)资昧,Android Studio會(huì)使用正確的項(xiàng)目設(shè)置重新編譯項(xiàng)目)
- 運(yùn)行Android Lint(仔細(xì)查看Lint警告信息,在項(xiàng)目中也許就能在這個(gè)工具的幫助下獲得意想不到的發(fā)現(xiàn)噢)
如果仍然無(wú)法解決問(wèn)題荆忍,那就訪(fǎng)問(wèn) http://stackoverflow.com 尋求幫助吧 ~ O(∩_∩)O哈哈 ~
挑戰(zhàn)練習(xí):探索布局檢查器
使用布局檢查器以交互的方式檢查布局文件格带,調(diào)試布局文件,研究它是如何在屏幕上渲染顯示的刹枉。啟動(dòng)應(yīng)用叽唱,在Android Monitor工具窗口點(diǎn)擊最左邊的布局檢查器按鈕,布局檢查器激活后微宝,點(diǎn)擊布局檢查器視圖里的元素查看布局屬性棺亭。
挑戰(zhàn)練習(xí):探索內(nèi)存分配跟蹤
在Android Monitor工具窗口滩援,點(diǎn)擊內(nèi)存分配跟蹤器按鈕啟動(dòng)它栅隐。
然而纪吮,AS3.0我也沒(méi)找到書(shū)上的這個(gè)內(nèi)容俩檬,不過(guò)提供了個(gè)強(qiáng)大的 Android Profiler 分析器。
還有butterknife最新的在3.0.0也報(bào)錯(cuò)有問(wèn)題检痰,所以我用的butterknife版本為8.4.0包归。
終于可以勾選那個(gè)Enable advanced profiling了,那里描述是铅歼,需要API級(jí)別小于26公壤,在允許Profiler跟蹤網(wǎng)絡(luò)負(fù)載换可,應(yīng)用程序事件和對(duì)象計(jì)數(shù)等數(shù)據(jù)的時(shí)候,它可能對(duì)構(gòu)建速度有輕微的性能影響厦幅。
單擊Network——網(wǎng)絡(luò)使用情況
橫坐標(biāo)代表是時(shí)間軸锦担,那些折現(xiàn)是一些網(wǎng)絡(luò)請(qǐng)求,按住鼠標(biāo)左鍵從中選擇一個(gè)范圍慨削,那用兩條白色的豎桿包起來(lái)那塊就是選擇的范圍洞渔,然后左下的列表就列出來(lái)了此范圍的網(wǎng)絡(luò)請(qǐng)求信息,什么狀態(tài)啊缚态,時(shí)間磁椒,請(qǐng)求類(lèi)型啊,點(diǎn)擊其中一條玫芦,右邊顯示的response更為具體了浆熔,圖片的直接顯示了圖片,還有URL桥帆,不是圖片的医增,把json數(shù)據(jù)全部都顯示出來(lái)了,這個(gè)功能真的好方便呀老虫,旁邊還有一些選項(xiàng)叶骨,都可以看看用于分析。
單擊MEMORY——內(nèi)存使用情況
單擊CPU——CPU占用情況
具體怎么分析使用祈匙,網(wǎng)上也有不少忽刽,可以參考博客:http://blog.csdn.net/niubitianping/article/details/72617864
更新于 2018/2/2