AndroidStudio高級代碼調試功能

一刮便、起因

高級IDE的Debug功能幾乎是必備的讹蘑,我用的第一個Debug的IDE是Visual Studio(簡稱VS),那時還是大學功偿。工作之后其實大多數時間開發(fā)的是業(yè)務為導向的app盆佣,調試的幾乎也就是看看某些執(zhí)行流程對不對往堡,或者某些變量的動態(tài)值,這些app大多面向網絡的共耍,大多數是調試網絡接口虑灰,用Charles抓包然后加打印Log的方式就可以了。但最近研究AndroidFramework層的功能痹兜,簡單的調試已經不能滿足了穆咐,舉個簡單的例子,Android源碼調試字旭,總不能每次加一行Log然后編譯一次系統(tǒng)吧=_=

二对湃、從何說起

1. 如何打斷點

好像所有的IDE,打斷點的方式沒什么區(qū)別吧遗淳,就是行號旁邊點擊一下拍柒,看下圖:

斷點打哪.png

上圖中的斷點有三個,分別是Java Field Watchpoints Java Line Breakpoints Java Method Breakpoints屈暗,還有幾種斷點拆讯,沒法在界面中顯示出來。要想看項目中的所有的代碼恐锦,可以打開Breakpoints控制面板:菜單欄 Run -->View Breakpoints如下圖所示:

breakpoints.png

看左側的列表分類往果,斷點類型大概總共六類如下表:

斷點名字 中文名字 作用
Java Line Breakpoint 行斷點 最常見的斷點,執(zhí)行到這一行代碼會觸發(fā)斷點
Java Method Breakpoint 方法斷點 斷點打在方法頭那一行一铅,更加方便的觀察參數和返回值
Java Field Breakpoint 字段斷點 打在某個字段聲明上陕贮,當字段被重新賦值的時候觸發(fā)斷點
Java Exception Breakpoint Java 異常斷點 當拋出某個異常時,觸發(fā)斷點
Exception Breakpoint 異常斷點 未知
Symbolic Breakpoint 符號異常 未知

看我左邊看右邊潘飘,右邊是對每個斷點的詳細配置肮之,以行斷點為例,其余大同小異(出了上表最后兩個):

  • Enable:斷點是不是可用
  • Suspend:執(zhí)行到斷點的時候卜录,程序是不是暫停到斷點
  • Condition:執(zhí)行這個斷點條件
  • Log message to console :執(zhí)行到這個斷點的時候戈擒,打印一行日志
  • Evaluate and log: 執(zhí)行到這個斷點時候,打印一樣自定義日志艰毒,這個日志中可以包含程序中的變量或者求值表達式(很有用筐高,這樣可以省去一部分Log)
  • Remove once hit:斷點觸發(fā)一次后就被移除了

其余的配置我也沒用過,表示不會

2. 啟動debugger

AS中debugger的啟動按鈕

里面有幾個按鈕可以嘗試都點一下丑瞧,英文也很容易理解柑土,從下面的進程中選擇一個要attach 到debugger上,然后就可以debug這個進程了绊汹。啟動之后稽屏,等到某個斷點被觸發(fā)的時候,就出現(xiàn)了下面的界面西乖。同時可以選擇調試類型狐榔,如下引自官網:

有下列調試類型可供您選擇:
Auto
如果您希望 Android Studio 自動為您要調試的代碼選擇最合適的選項坛增,請選擇此類型。例如薄腻,如果您的項目包含任何 C 或 C++ 代碼收捣,Android Studio 會自動使用 Hybrid 調試類型。否則庵楷,Android Studio 會使用 Java 調試類型坏晦。
Java
如果您只想調試以 Java 編寫的代碼,請選擇此類型 - Java 調試程序會忽略您在原生代碼中設置的任何斷點或監(jiān)視嫁乘。
Native
如果您只想使用 LLDB 來調試代碼,請選擇此類型球碉。使用此調試類型時蜓斧,Java 調試程序會話視圖不可用。默認情況下睁冬,LLDB 只檢查您的原生代碼挎春,而會忽略 Java 代碼中的斷點。如果您也想調試 Java 代碼豆拨,則應切換到 Auto 或 Hybrid 調試類型直奋。
Hybrid
如果您想在調試 Java 代碼與調試原生代碼之間切換,請選擇此類型施禾。Android Studio 會將 Java 調試程序和 LLDB 都連接到您的應用進程脚线,一個用于 Java 調試程序,一個用于 LLDB弥搞,這樣一來邮绿,您不必重新啟動應用或更改調試配置,便可同時對 Java 代碼和原生代碼中的斷點進行檢查

3. 調試工具窗口

啟動調試之后調試面板如下圖所示攀例,看起來好復雜船逮,全是按鈕,把鼠標懸停在按鈕上會出現(xiàn)這個按鈕的名字:


我的控制臺顯示面板.png

先看控制按鈕粤铭,再看控制面板:

1). 橫向控制按鈕

橫向控制按鈕挖胃,截圖來自官網

如上圖,這些都是基本的單步調試工具所具有的功能梆惯,上面很重要的是那個Evaluate Expression通過它可以查看當前類中所有的變量的值酱鸭,并且可以計算表達式的值,甚至可以運行某個函數加袋,得到結果凛辣。可以嘗試下职烧,在輸入的時候有代碼提示扁誓,比如在輸入框輸入我們上面的求和的函數防泵,就能直接得到運行結果。

2). 豎向控制按鈕

縱向控制按鈕.png
標號 名字 作用
Rerun android debugger 啟動或者重啟debugger
resume program 運行程序蝗敢,到下一個斷點處
pause program 暫停程序
stop android debugger 停止debugger捷泞,終止調試
View Breakpoints 打開斷點設置面板,和從菜單欄Run-->view breakpoints 進入的是同一個
Mute Breakpoints 暫時停用所有的斷點
7 Get Thread dump 獲取某個進程的信息
Restore Layout 恢復原來的debugger控制面板的布局
Settings 設置在調試過程中寿谴,會顯示那些信息(可以點開看看)
10,11,12 固定窗口锁右,關閉窗口,查看幫助

3). 調試工具窗口(或者說窗口)

名字 作用
Console 控制臺讶泰,上面設置的斷點的log比如Log message to console就打印在這里
Frames 正在運行的線程的堆棧信息(堆棧幀)
Virables 每個線程調用棧中的變量
Watches 觀察某個變量或者某個方法的執(zhí)行結果(這個比較有用)通過點擊Watches面板下邊的加號可以添加要觀察的對象

三咏瑟、最后看個簡單的例子

debugger測試用例.png

解讀一下上面的配置:這個斷點是一個行斷點,打在了代碼21行痪署,目前斷點有效(enable)码泞,當斷點被觸發(fā)的時候程序會停在斷點處等待用戶操作(Suspend),這個斷點是有觸發(fā)條件的狼犯,必須在for循環(huán)中i不等于0的情況下才會觸發(fā)這個斷點(Condition i!=0)余寥,當斷點觸發(fā)的時候會在控制臺打印一句log通知用戶,斷點被觸發(fā)(Log message to console )悯森,并且我們自定義個log宋舷,能夠打印i+i 的值("計算下"+i+"+"+i+"="+calculate(i,i))。是不是真是這樣呢瓢姻,可以按照上面的步驟啟動調試祝蝠,然后點擊按鈕使其執(zhí)行onClick方法,然后執(zhí)行到這個for循環(huán)汹来,看是否能夠打印log续膳。
運行結果如下:

測試結果.png

其余類型斷點,的配置和調試大同小異收班,可以點著玩 ̄□ ̄||

【參考文獻】

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末坟岔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摔桦,更是在濱河造成了極大的恐慌社付,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邻耕,死亡現(xiàn)場離奇詭異鸥咖,居然都是意外死亡,警方通過查閱死者的電腦和手機兄世,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門庆捺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贞绵,“玉大人凸主,你說我怎么就攤上這事〉吃叮” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵富弦,是天一觀的道長沟娱。 經常有香客問我,道長腕柜,這世上最難降的妖魔是什么济似? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮盏缤,結果婚禮上砰蠢,老公的妹妹穿的比我還像新娘。我一直安慰自己唉铜,他們只是感情好娩脾,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著打毛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俩功。 梳的紋絲不亂的頭發(fā)上幻枉,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音诡蜓,去河邊找鬼熬甫。 笑死,一個胖子當著我的面吹牛蔓罚,可吹牛的內容都是我干的椿肩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼豺谈,長吁一口氣:“原來是場噩夢啊……” “哼郑象!你這毒婦竟也來了?” 一聲冷哼從身側響起茬末,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤厂榛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后丽惭,有當地人在樹林里發(fā)現(xiàn)了一具尸體击奶,經...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年责掏,在試婚紗的時候發(fā)現(xiàn)自己被綠了柜砾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡换衬,死狀恐怖痰驱,靈堂內的尸體忽然破棺而出证芭,到底是詐尸還是另有隱情,我是刑警寧澤萄唇,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布檩帐,位于F島的核電站,受9級特大地震影響另萤,放射性物質發(fā)生泄漏湃密。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一四敞、第九天 我趴在偏房一處隱蔽的房頂上張望泛源。 院中可真熱鬧,春花似錦忿危、人聲如沸达箍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缎玫。三九已至,卻和暖如春解滓,著一層夾襖步出監(jiān)牢的瞬間赃磨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工洼裤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邻辉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓腮鞍,卻偏偏與公主長得像值骇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子移国,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容