程序員的工做內容,有很多的時間是用在調試代碼上。能夠說不是在調試代碼,就是即將調試代碼。java
掌握調試代碼的一些技巧,在使用IDE提供的debugger時會快速定位問題的方式。程序員
在多線程應用的開發中,有時候爲了觀察多個線程間變量的不一樣狀態,以及鎖的獲取等,就會想到在代碼里加個斷點debug一下。
在IDE裏斷點停下來的時候,能夠切換到另外的線程中,跑其餘的代碼,不會互相影響。固然,這裏是有個開關的,在Eclipse裏默認開啓,
IDE直接在斷點處,將suspend改爲Thread安全
一個線程斷下來以後,能夠經過在線程窗口切換,到其它線程中繼續運行,IntelliJ IDEA裏在這裏切換多線程
能夠看到exec-10線程和exec-4這兩個線程都處於RUNNING狀態,切換到任何一個均可以繼續運行。lua
(能夠寫一個多線程的應用,同時向ArryList這一類非線程安全的容器中存放內容,而後觀察爲何它們是線程不安全的,會出現什麼問題)spa
建議:建立線程時建議起一個有意義的名字,至少是能夠識別的名字,不然在這裏都不能區分出哪一個是本身的線程,方便切換線程
有些時候咱們在debug代碼時,每一個方法都進入單步調試,就會出現觀察一個變量值的變化時,某個方法沒跟進去,結果值就變了,不得不重來一次。
後退執行的功能,能夠後退,在IDE裏被稱爲Drop Framedebug
這個功能,在Drop了當前這個Frame以後,已經改變的變量值不會恢復。好比你向當前調用方法裏傳入了一個Map,而且在方法中向Map裏添加了內容,那在Drop到調用該方法的地方時,Map不會恢復到以前的狀態。
可是在該方法再次被調用時,你能夠觀察Map何時被改變的,至少不須要再重跑一遍程序了調試
在添加斷點的時候,能夠爲斷點增長必定的條件,這樣,在指定的條件知足時,斷點纔會生效
IntelliJ IDEA內,在斷點上右擊,會彈出以下圖的條件框,輸入指定的條件便可對象
有了條件斷點,不符合條件的代碼就直接跳過了
在IDEA裏有一個執行代碼片段的功能,能夠在當前代碼的上下文內,執行你臨時寫的代碼。
好比,當前方法傳入一個List,但這個方法裏少一個後面條件須要使用到的元素,此時能夠臨時使用片段代碼執行的功能,添加一個進去。
在IntelliJ IDEA裏,這個上面紅框,像個小計算器的按鈕就是臨時執行的功能,點擊以後,會彈出按鈕下方這個Evaluate Expression的框,輸入代碼,點擊右下角的Evalute便可,返回值會顯示在Result處
這就就至關於臨時改變了變量內容
而後,調用對象的方法,執行功能,獲取屬性值。。。。
IDE在調試代碼時都提供了一個觀察當前上下文變量值的窗口,其實除了查看以外,一些非final的基本類型,還能夠直接在此處修改值,這樣若是屢次循環執行時,每次能夠恢復到指望的值,不須要重啓程序
調試快捷鍵:
F9:恢復程序 Alt+F10:顯示執行斷點 F8: 跳到下一步 F7:進入到代碼 Alt+shift+F7:強制進入代碼 Shift+F8:跳到下一個斷點 Atl+F9:運行到光標處 ctrl+shift+F9:debug運行java類 ctrl+shift+F10:正常運行java類 Alt+F8:debug時選中查看值