斷點與調試
1. 前言
通過前面章節(jié)的介紹,我們已經(jīng)知道如何運行 Java 程序了。
現(xiàn)在讓我們看看當程序運行達不到我們的預期的時候,我們如何進行調試,以便找出其中的 BUG。
Eclipse 中的 Java開發(fā)工具包(JDT)為我們提供了一個調試器(debugger)。
調試器可以幫助我們查找代碼中的問題,它帶來了設置斷點,掛起運行中的程序,檢查變量的內容等功能。
要使用調試器對我們的代碼進行調試,我們首先需要知道斷點是什么以及如何設置斷點。
知道如何設置了斷點后,我們還需要去熟悉 Debug 視圖中的執(zhí)行控制命令,這樣,我們才知道如何進行調試。
下面,讓我們從了解斷點開始,學習如何在 Eclipse 中進行調試。
2. 斷點
2.1 斷點是什么
斷點是 Eclipse 為我們提供的一個功能,它可以讓我們把運行中的程序掛起(暫停)。
當我們進行調試時,程序遇到斷點的時候會被掛起(暫停),此時,我們可以對程序進行檢查。這也是斷點的作用。
那么,在Eclipse中,斷點是什么樣子的呢?
通常,我們會通過 Java編輯器中的標尺設置斷點,如下圖所示:
上圖中紅色框起來的位置就是我們的標尺區(qū)域。
同時如果設置了斷點,將會顯示一個藍色的圓圈,它代表了我們在 Eclipse 中的斷點。
2.2 添加斷點
添加斷點,我們有兩種方法:
- 直接雙擊標尺中的行號
- 鼠標右鍵標尺中的行號,在彈出的菜單中進行選擇。
第一種方法直接雙擊行號后,就可以為該行代碼添加斷點了(行號左邊出現(xiàn)藍色圓圈)。
如果要取消斷點,只需要再次雙擊該行號。
第二種方法,在我們鼠標右鍵標尺中的行號后,在彈出的菜單中選擇 Toggle Breakpoint 選項后,將為該行添加斷點。如下圖所示:
如果要取消斷點,只需要再次選擇 Toggle Breakpoint 選項。
如菜單中所示,我們還可以通過 Shift + Command + B (如果是非Mac系統(tǒng),則是 Shift + Ctrl + B)來操作,該操作將直接為我們光標所在的行添加或取消斷點。
2.3 禁用斷點
除了通過再次操作添加斷點的方式取消斷點外,我們還可以禁用斷點。
斷點如果禁用,那么該行代碼將不會被掛起。
在斷點處鼠標右鍵,此時的出現(xiàn)的菜單將可以選擇 Disable Breakpoint 選項,如下圖所示:
如菜單中所示,我們還可以通過 Shift + 雙擊鼠標左鍵 來禁用斷點。
選擇 Disable Breakpoint 選項后,斷點將由藍色的圓圈,變成白色的圓圈:
同樣,如果要恢復,只需要再次執(zhí)行一遍該操作即可。
3. 調試
了解斷點后,讓我們來看看如何對我們的 Java 代碼進行調試。
3.1 打斷點
首先,如果要調試代碼,我們要在需要調試的代碼位置打上斷點:
打上斷點后,我們就可以開始啟動調試了。
3.2 啟動調試
啟動調試有 3 種途徑:
- 在 Java 文件的空白處點擊鼠標右鍵,在彈出的菜單中選擇 Debug As 選項。
- 鼠標右鍵我們的 java 文件,在彈出的菜單中選擇 Debug As 選項。
- 在工具欄中找到 Debug 圖標,在彈出的菜單中選擇 Debug As 選項。
不管選擇哪種,我們都可以啟動我們的調試,下圖是通過在工具欄中選擇 Debug 圖標的方式:
選擇 Debug As -> 1 Java Application 后,我們將看到詢問我們是否切換到 Debug 透視圖的窗口,如下圖所示:
如果我們已經(jīng)處于 Debug 透視圖 那么就不會出現(xiàn)該彈窗。
我們選擇 Switch,這將幫我們打開 Debug 透視圖,如下圖所示:
Debug 透視圖中默認有兩個視圖,分別是左邊的 Debug 視圖,右邊的變量視圖。
3.3 Debug 透視圖
3.3.1 Debug 視圖
Debug 視圖顯示的是我們正在調試過程中被掛起的線程的堆棧信息。
其中每個線程在視圖中被顯示為樹中的一個節(jié)點,如下圖紅框所標示的就是一個節(jié)點:
和 Debug視圖 相關聯(lián)的還有一些常用的按鈕,如下圖所示:
其中 2,3,4,5 是我們的調試中的 執(zhí)行控制命令,圖中標示的按鈕如下:
- 這是個開關選項,如果選擇打開,則跳過所有的斷點。
- 恢復掛起的線程(Resume)。
- 終止被選擇的調試目標(Terminate)。
- 進入當前被高亮的語句(Step Into)。
- 開始執(zhí)行被高亮語句的下一個語句(Step Over) 。
- 這是個開關選項,如果選擇打開,則開始使用步驟過濾器(Use Step Filters)。
除此之外我們還有三個按鈕沒有被亮起,這是三個也是屬于調試中的執(zhí)行控制命令:
- 可以掛起線程,以便我們?yōu)g覽或修改代碼,檢查數(shù)據(jù),執(zhí)行步驟等(Suspend)。
- 此按鈕用于遠程調試用,點擊時將斷開連接(Disconnect)。
- 將跳出當前的方法(Step Return)。
現(xiàn)在,讓我們點擊 Step Over 按鈕,把程序運行到第 12 行,如下圖所示:
接下來,讓我們把關注點放到變量視圖中。
3.3.2 變量視圖
變量視圖顯示的是調試中相關的變量信息:
我們可以看出來,變量視圖分為上下兩部分。
上部分就是變量的信息,包括變量名和變量值。
下部分其實一個詳細窗格,在我們選擇變量后,可以用于更全面地顯示變量的信息。
我們這里只有一個值,但是如果是一個數(shù)組,該窗格能體現(xiàn)更多的作用。
3.4 完成調試
通過一行一行地執(zhí)行我們的代碼,我們就可以完成對我們代碼的調試。
通常我們會通過前面介紹的 Debug 視圖中的執(zhí)行控制命令來一步步地控制語句的運行,然后觀察變量視圖中的內容。
調試中,高亮的語句是當前被掛起的地方。
我們可以使用 Step Into 或者 Step Over 按鈕進行下一條語句的執(zhí)行。
當整個程序執(zhí)行完,或者我們自己點擊終止按鈕時,調試結束。
5. 小結
本文中講解了斷點和調試的內容。
其中的重點是,我們需要了解如何設置斷點和熟悉 Debug 視圖。
多去使用 Debug 視圖是掌握 Eclipse 調試的好辦法。