我真是服了!AS Debug還能這麼玩?
目錄
前言
Debug斷點跟蹤除錯是開發過程中分析程式碼、解決BUG的一個重要手段,很多程式設計師的除錯水平往往停留在單步執行階段,因為單步執行往往就可以解決大部分的問題。但是一個優秀的程式設計師不僅僅要解決問題,還要高效地解決問題,本文將介紹一些非常方便的除錯技巧
基本使用
Debug App有兩種途徑:
第一種是直接點選下圖執行按鈕右側的小蟲狀圖示,執行並除錯當前Project
第二種就是除錯當前已經處於執行狀態下的App,點選執行按鈕右側第五個按鈕,彈出
Choose Process
視窗,選擇對應的程式,點選OK按鈕即可進入除錯模式,此時,我們便可以在需要的地方直接下斷點除錯程式碼了
接下來就是常見的除錯方法了,在Debug視窗頂部工具欄有一排操作按鈕,比如
Step Over
(單步執行)、
Step Into
(進入方法)等,如圖所示:
打斷點和取消斷點最直接的方式就是單擊目的碼行的行號右側空白處,然後在Debug視窗左側有個斷點瀏覽按鈕
View Breakpoints
,位於停止按鈕下方第一個,可以瀏覽Project中的所有斷點,同時可以新增刪除斷點
條件斷點
有時候,我們的斷點打在了迴圈體裡面,但是我們只想看某一特定迴圈次數下的執行情況,難道要不停地跳至下一次斷點直至滿足我們的要求嗎?
條件斷點可以自己輸入條件,比如
for
迴圈中輸入
i == 5
即可讓程式直接執行至第六次迴圈
日誌斷點
列印日誌也是跟蹤程式分析問題的一個非常有效的手段,但是如果我們的程式已經執行並且處於除錯模式,此時如果想列印日誌來分析程式碼,難道還要停止除錯、新增Log程式碼並重新編譯執行嗎?
如果使用日誌斷點,就不用這麼繁瑣了。右鍵點選斷點,在彈出的視窗中取消勾選
Suspeng
核取方塊(即表示程式執行至此斷點時不會停下來供開發者除錯),然後勾選
Evaluate and log
,並輸入列印語句即可。這樣,當Debug模式下的程式執行至此,不會停下來,而是在控制檯中列印對應資訊
變數賦值
比如,我們的程式碼裡有一個變數,這個變數的值會影響到程式的執行結果。如果我們想觀察這個變數在不同的賦值下程式的執行結果怎麼辦呢?難道要一遍遍的在程式碼裡修改變數值,然後重新執行程式嗎?顯然這是非常麻煩的操作。如果利用Debug模式下的變數賦值(
Set Value
),只需要執行一次,就能達到我們的觀察效果。在使用該變數的程式碼處打個斷點,然後在
Variables
視窗找到對應的變數,修改變數值並執行即可
如這裡我們可以把b的值改為false,那麼Toast輸出的值就是Hi
變數觀察
在
Variables
變數區和
Watches
觀察區可以檢視Debug模式下,程式執行到斷點處的變數值或者物件的各屬性值,如果程式比較複雜變數很多看起來就有點不方便。那麼就可以透過彈出視窗的形式檢視屬性值,只要將游標定位至斷點程式碼行所用到的變數,IDE會自動彈出一個小視窗,如下圖所示,此時,使用對應的快捷鍵或者點選這個小視窗裡的變數即可彈出變數屬性值視窗,Mac下的快捷鍵位
command + F1
,如圖所示:
我們也可以使用
New watch
,方便我們更快定位到需要觀察的變數
物件求值
在斷點處,如果有變數物件,系統提供了表示式求值功能,針對
Variables
檢視中的變數物件,我們可以輸入任何計算語句,實時檢視錶達式計算結果。具體操作為,右鍵
Variables
檢視中的變數物件,選擇
Evaluate Expression
,彈出表示式視窗,輸入任何你想要的計算語句,點選
Evaluate
計算按鈕,即可顯示計算結果
方法斷點
當我們想要觀察某個方法的呼叫時機,可以使用方法斷點
這裡有一個小建議,我們可以在寫一個方法的時候,在方法註釋中列出方法入參,這樣一方面是可以給入參增加一些註釋,同時在打斷點的時候,也能非常直觀的看到方法入參的值
變數斷點
有時候,我們想知道自定義的變數的何時何地發生了改變,就可以使用變數斷點。在變數定義行打斷點,開啟Debug模式,在程式執行的過程中,如果該變數的值發生改變,程式會自動停下來,並定位在改變變數值的地方。這裡要注意的是,對於引用資料型別,透過set方法改變內部的值並不會觸發變數斷點,只有引用的地址發生改變才會觸發
異常斷點
程式在執行的過程中可能會出現各種各樣的未知性異常,如果能在發生異常的時候第一時間讓程式停下來,並定位到異常出現的地方,而不是讓應用直接崩潰,那樣有時候能幫助我們更方便定位問題
開啟斷點管理器,點選工具欄選單
Run
,選擇
View Breakpoints
;在Debug視窗直接點選
View Breakpoints
圖示。點選左上角加號按鈕,可以新增各種斷點,包括前文提到的
Method Breakpoints
和
Field Watchpoints
斷點,這裡我們選擇
Exception Breakpoints
異常斷點,在彈出的
Enter Exception Class
視窗中輸入需要監控的異常類別即可
這樣當我們執行下面的程式碼,IDE會自動幫我們定位到問題發生的位置
總結
debug
是非常非常基礎的技術,所謂磨刀不誤砍柴工,掌握一些小技巧,往往能幫我們更高效的解決一些問題。本文拋磚引玉,希望大家在開發過程中多留心一些很基礎的技術,有時候瞭解一些你認為很不起眼的知識點,能夠幫助你解決一些很棘手的問題
但是,在多執行緒環境下,光靠
debug
是不行的。有時
debug
本身會帶來一些問題混淆了現場,比如因為
debug
時的卡頓造成環境不一致等等,這時應該學會使用打日誌的形式幫忙除錯,平時打日誌的時候也應該多注意一些規範,這樣能更方便排查問題
Android 發展至今,競爭日趨激烈,衝擊更高的職位,才有更高的收入!而我們Android程式設計師,要學的東西有很多,要想不被環境淘汰就只有不斷提升自己,從來都是我們去適應環境,而不是環境來適應我們!
附上我的Android核心技術學習大綱,獲取相關內容來我的GitHub一起玩耍:
vx:xx13414521
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2675047/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 受不了了,learnku社群這個評論框我真是服了
- iOS 通知還能這麼玩?iOS
- 郵件告警還能這麼玩?!
- Java“微服務”還能這麼玩!Java微服務
- postMessage 還能這樣玩
- 作畫、寫詩、彈曲子,AI還能這麼玩?AI
- JavaScript 事件迴圈竟還能這樣玩!JavaScript事件
- FPS這趟順風車,我們還能搭得上麼?
- Java 11 已釋出,String 還能這樣玩!Java
- 一次打包引發的思考,原來maven還能這麼玩?Maven
- 人工智慧下的音訊還能這樣玩!!!!人工智慧音訊
- Java11已釋出,String還能這樣玩!Java
- 被《AIGC體驗派》硬控25分鐘,大模型落地還能這麼玩?AIGC大模型
- “吃雞”還能這麼玩! 中世紀冷兵器之戰:騎馬與砍殺
- 開源!mathAI 手寫拍照自動能解高數題,AI 還能這麼玩?AI
- 敲了這麼多年程式碼,這樣的登入方式還真是頭一回見
- 深度分頁,我都是這麼玩的
- ca..原來 stf 還可以這麼玩...
- 冷門快捷鍵惡意利用,後門還能這樣玩
- CSS 還能這樣玩?奇思妙想漸變的藝術CSS
- 人人皆可虛擬,直播還能這麼玩?聲網推出 MetaLive 元直播解決方案
- 華為雲招聘動物語言翻譯師?人工智慧還能這麼玩人工智慧
- java列舉原來還能這麼用Java
- 海洋廢土還能這麼玩?神祕新遊《代號:ATLAS》首次曝光獲高度期待
- 輕中度遊戲的出海變現還能怎麼玩?遊戲
- 互動視訊還能怎麼玩?我總結了B站上的幾種另類套路
- 還能這麼玩?用VsCode畫類圖、流程圖、時序圖、狀態圖...不要太爽!VSCode流程圖時序圖
- Flutter | 日誌還能這麼列印,太秀了!Flutter
- Android沉浸式狀態列還能這樣玩—教你玩出新花樣Android
- 我服了!SpringBoot升級後這服務我一個星期都沒跑起來!(下)Spring Boot
- 雙十二來了,你的表格可以這樣玩!這個工具還能提升Excel的效能Excel
- 還能這樣玩?Go 將會增強 Go1 向前相容性Go
- 微信和Python之間,還能這樣玩的嘛,漲見識了!Python
- 原來 Element 的元件原始碼還能這麼看元件原始碼
- ICLR 2020 | 模型引數這麼多,泛化能力為什麼還能這麼強?ICLR模型
- 六年了,這款遊戲為什麼還是有這麼多人在玩遊戲
- 一個 static 還能難得住我?
- 酒店營銷人必看!簡訊營銷還可以這麼玩!