? 這幾天寫(xiě)了點(diǎn)基礎(chǔ)模塊鸟缕,一口氣寫(xiě)完,結(jié)果沒(méi)跑通(╯﹏╰)排抬,免不了調(diào)試一把懂从,調(diào)來(lái)調(diào)去有些心煩,就順帶把AS里的調(diào)試都看了一遍蹲蒲。調(diào)試作為一個(gè)開(kāi)發(fā)者最基礎(chǔ)的技能番甩,也是很重要的一個(gè)手段,正巧就講一講一些基礎(chǔ)的調(diào)試方法届搁,具體要是感興趣缘薛,可以去官網(wǎng)看看。
? 調(diào)試很簡(jiǎn)單咖祭,直接在代碼的最右邊掩宜,點(diǎn)擊一下就會(huì)出現(xiàn)一個(gè)紅點(diǎn)
? 然后點(diǎn)擊菜單欄上的debug按鈕(有兩個(gè),第一個(gè)是debug app么翰,使app重新啟動(dòng)牺汤,然后進(jìn)入debug,第二個(gè)是attach debugger浩嫌,可以直接連接到正在運(yùn)行的android process)
? 當(dāng)程序跑到相應(yīng)的斷點(diǎn)檐迟,就會(huì)停在斷點(diǎn)處补胚。什么step into,step over的我就不講了追迟,這里講一個(gè)Evaluate Expression溶其。
? 在調(diào)試操作按鈕的邊上,一個(gè)像小計(jì)算機(jī)的圖標(biāo)(當(dāng)然也有快捷鍵敦间!ctrl+U)瓶逃。這個(gè)Evaluate Expression是個(gè)求值表達(dá)式,可以在斷點(diǎn)的時(shí)候廓块,啟動(dòng)一個(gè)“計(jì)算器”厢绝,可以任意編輯表達(dá)式進(jìn)行計(jì)算。使用這個(gè)的最方便之處在于带猴,當(dāng)斷點(diǎn)處無(wú)法提供一些你想要的信息的時(shí)候昔汉,可以自己編寫(xiě)表達(dá)式,去查看結(jié)果拴清。
分類
? 根據(jù)調(diào)試內(nèi)容的劃分靶病,可以分為“字段調(diào)試”、“方法調(diào)試”口予、“異常調(diào)試”娄周。
字段調(diào)試
? 字段調(diào)試的紅點(diǎn)是有一杠的,在字段處斷點(diǎn)苹威,右鍵小紅點(diǎn)昆咽,還可以設(shè)置其斷點(diǎn)屬性驾凶。
? 當(dāng)右鍵點(diǎn)擊后牙甫,可以選擇是訪問(wèn)的時(shí)候斷,或者是修改的時(shí)候斷调违,我們注意到窟哺,上面還有一個(gè)Condition,這個(gè)是做什么的呢技肩。假設(shè)且轨,這個(gè)斷點(diǎn)是在一個(gè)循環(huán)當(dāng)中,且值一直在變化虚婿,你是不停地人工watch然后不停地人工next直到找到想要的value嗎旋奢?NONONO,這太累了然痊,Condition就是用來(lái)增加條件篩選符合的value的至朗,只有符合condition的語(yǔ)句,才會(huì)斷點(diǎn)剧浸,這可以大大提升你的debug效率锹引,是不是感覺(jué)輕松了很多矗钟。
方法調(diào)試
? 方法調(diào)試的紅點(diǎn)是四個(gè)小點(diǎn),斷點(diǎn)后嫌变,可以斷到所有用到該方法的位置吨艇。這里介紹一下Debug面板
? 最右邊是frames層,也就是整個(gè)breakpoint被斷的路徑腾啥,可以一層層的往上查看东涡,中間的Variables是可以看到當(dāng)前場(chǎng)景里的變量值,watches是觀察器倘待,可以選中某個(gè)變量软啼,右鍵Add to Watches,可以一直觀測(cè)該變量的變化延柠。
異常斷點(diǎn)
? 講異常斷點(diǎn)前祸挪,我們先來(lái)看一下view breakpoints
? 菜單欄中找到run->View Breakpoints,會(huì)看到這么一個(gè)界面
? 在這個(gè)界面中贞间,我們可以看到贿条,在左側(cè)的幾行中,能看到不同的exception的斷點(diǎn)增热,只要選中整以,程序就會(huì)在發(fā)生異常的時(shí)候,被斷住峻仇。其實(shí)這個(gè)不是重點(diǎn)公黑,我們先來(lái)講個(gè)情景。當(dāng)我們?cè)谡{(diào)試的時(shí)候摄咆,會(huì)想著打log凡蚜,通過(guò)console看log的值來(lái)定位問(wèn)題,但是這個(gè)log你又不是一開(kāi)始就寫(xiě)了吭从,往往是斷點(diǎn)調(diào)著調(diào)著發(fā)現(xiàn)朝蜘,哎,我這里想看一下a這個(gè)值是多少涩金,然后坑次坑次地寫(xiě)上一句Log.i("a", a);關(guān)鍵是你還要編譯一遍谱醇,哇,這你要等多久啊步做,小項(xiàng)目還好副渴,大項(xiàng)目動(dòng)不動(dòng)就5-6分鐘,完了你還不一定會(huì)記得這里有個(gè)test的 log全度,忘了刪了煮剧。然后我就要請(qǐng)出我們的主角,evaluate and log。
? 我們把suspend這個(gè)勾給去掉轿秧,他是用來(lái)決定是否斷停的中跌,如果勾去掉,debug還在菇篡,但是不會(huì)在這個(gè)地方斷住漩符,然后勾住log message to console和evaluate and log,在編輯框里寫(xiě)上你要的Log語(yǔ)句驱还,就可以在logcat里看到相對(duì)應(yīng)的log了嗜暴,而且并沒(méi)有改動(dòng)源代碼,也不會(huì)生成多余的代碼议蟆,是不是感覺(jué)很方便闷沥。
總結(jié)
? 好了,調(diào)試的基本用法咐容,大致就以上幾種舆逃。相信學(xué)會(huì)這些方法后,一定可以提升我們平時(shí)Coding調(diào)試的效率戳粒,更快的解決問(wèn)題路狮。