本文參考了網上一些debug的教程,又在本身實踐的基礎上增長和改進了不少技巧.以上全部教程都是在debug視圖中,請注意!java
若是你不知道如何添加斷點,只需點擊左邊面板(行號前面)斷點即被建立。在調試界面中,「斷點」視圖會把全部被建立的斷點列出來。咱們能夠給它加一個布爾條件,而後按Ctrl+s保存斷點,該斷點會被激活而且若是布爾條件爲真,就會執行該斷點,不然將會跳過往下執行。web
在斷點視圖中,有一個J!標記按鈕!咱們可使用該按鈕來添加一個Java異常斷點。例如,咱們想讓程序在遇到空指針異常(NullPointerException)時進入斷點,那麼咱們可使用該按鈕來添加一個異常斷點!.數據庫
異常斷點特別適合調試程序的異常,迅速找到異常拋出的位置express
這是一個很是好的功能,當選定的屬性訪問或修改程序時,程序會中止執行並容許進行調試。在Outline視圖中選擇一個 類變量 右鍵選擇監視點,屬性監視點將會被建立,在斷點(Breakpoints)視圖中會把全部監視點用列表的形式顯示出來。windows
按Ctrl+Shift+D或者Ctrl+Shift+I來顯示選定變量或者表達式的值。咱們也能夠給一個變量或表達式添加永久觀察點,當程序在調試時,這些觀察點就會在表達式視圖(Expression view)中顯示出來。服務器
在調試過程當中,咱們能夠修改變量值。先選好一個變量而後進入變量視圖(Variables view),根據變量類型在其對應的Value列裏輸入值便可.數據結構
注意:這裏只能修改基本類型和String,集合類的還不能直接輸入修改app
在運行/調試設置中,編輯配置對話框中有「Main」這個選項卡,咱們能夠勾選「Stop in main」這個複選框。若是選中,那麼在調試一個基於main方法的Java程序時,程序會在main方法第一行位置便中止執行。框架
並非在系統屬性中添加環境變量,咱們能夠在編輯配置對話框中很方便地進行添加。eclipse
這也是我最喜歡的一個功能。調試期間,能夠從新跳到調用堆棧框架的開始處執行,而且變量值也會回到最初。根據回檔調整堆棧的深度,這個功能的主要用途是全部變量狀態能夠快速回到方法開始執行時候的樣子,而後你能夠從新進行一遍一遍執行,這樣就能夠在你關注的地方進行屢次調試,可是在執行過程當中也會產生一些反作用,好比插入到數據庫裏面的數據是沒法刪除的!
當咱們進入(F5)方法的時候,常常會進入jdk自帶的源碼中,咱們可能不須要這個庫,就能夠在Perference選項卡頁面添加一個過濾器來排除這個包。
我把這個放在最後一點,在調試過程當中,這些是必需要了解(最好掌握)的東西:
F5——進入:移動到下一個步驟,若是當前行有一個方法調用,該控件將會跳轉到被調用方法的第一行執行。
F6——跳出:移動到下一行。若是在當前行有方法調用,那麼會直接移動到下一行執行。不會進入被調用方法體裏面。
F7——返回:從當前方法中跳出,繼續往下執行。
F8——移動到下一個斷點處執行。
在debug界面中,右擊variable下面的空白,選擇maxLength,把10000改爲0,0表明沒有限制
遠程debug能夠用來調試遠程服務器上的代碼,保證你本地代碼和遠程部署的代碼是一致,就能夠經過這種方式debug服務器代碼,這個是java web開發的一大利器,不然定位服務器問題簡直是災難。遠程debug須要服務器端啓動jvm的時候作一些開啓和端口的配置,具體的配置網上不少,搜一下便可。而後在本地的debug configuration中雙擊添加一個remote java application,填寫遠程主機的host和配置的debug端口,就能夠開始debug了,以下圖
跳到幀是一種重入技巧,在debug時,eclipse能夠直接跳到調用棧中指定的任意楨,而且使JVM在此處從新運行。這使你能夠從新運行你的部分代碼,而不須要爲了調試以前的代碼而從新來一次。使用方式:選擇調用棧中的一楨,點擊按鈕「跳到楨」
要注意的是:已經被修改的變量不會被重置,它們會保留當時的值。
inspect用來查看某個表達式的之,對於變量值debug很容查看,可是對於一個表達式的值就不容易查看,仍是這句:this.getTradeDetail(uid, itemStr.subString(0,5))
想看getTradeDetail
的值,就無法想看變量值同樣(雖然這個頗有多是賦值給一個變量...),要看這種表達式值,就須要inspect,具體作法是選中這行表達式,而後右擊->inspect,或者更方便的快捷鍵組合:ctrl+shift+i,會彈出以下的展現表達式結果的框:
display也是用來觀察和修改變量or表達式的,這個應該用的人比較多,在windows->show viewz中打開display窗口,能夠在display窗口裏寫表達式,而後右擊選擇display運行查看結果或者ctrl+shift+D快捷鍵組合,表達式能夠是程序中一行代碼或者你本身寫的一個賦值語句來改變變量值之類的。
主要用來展現map之類的collection數據結構存儲的值的,它只展現存儲值的邏輯部分,而屏蔽了數據結構詳細的內部結構,更方便咱們查看map之類collection結構裏存儲的值
在variables上找到修改的變量,有兩種方式進行修改值
1.修改list中"aaaa"的值.如圖
第一個方法,在aaaa的地方修改必須使用return,好比 return "aabbcc"
按ctrl+s進行保存
第二個方法,右擊[2]的位置,選擇change value,在彈出框中輸入return "aabbcc"
按ctrl+s進行保存,操做如圖:
2.debug時修改map的值如圖:
第一個方法和list的相似.若是要修改"111"的值的話,不能用return了,必須使用map的方法進行賦值.map.put("aaa","ccccc")
按ctrl+s進行保存
第二個方法右擊選擇change value,在彈出框中輸入map.put("aaa","ccccc")
按ctrl+s進行保存
3.對象的修改,能夠直接修改的直接在下面修改,保存便可.不能修改的就用java表達式進行修改
若是項目工程直接有依賴,能夠直接debug到工程源碼,而不用在class文件上調試,以下圖,NCWEbpub依賴web_webapnew,在debug裏配置source把web_webapnew工程加進來