前言
本篇文章主要介紹如何進(jìn)行斷點(diǎn)調(diào)試
1、開始調(diào)試
開始調(diào)試主要分為兩步,第一為設(shè)置斷點(diǎn),第二才進(jìn)行調(diào)式操作。
1、設(shè)置斷點(diǎn)
設(shè)置斷點(diǎn)的方法基本上大多數(shù)的 IDE 都一致,當(dāng)我們?cè)诖a行上的數(shù)字旁鼠標(biāo)左鍵點(diǎn)擊一下,便設(shè)置斷點(diǎn)成功(可設(shè)置多個(gè)斷點(diǎn))。斷點(diǎn)還可以進(jìn)行其余設(shè)置
2、Debug調(diào)試
啟動(dòng)調(diào)式主要有以下三種方法:
- 工具欄點(diǎn)擊小甲蟲樣式的
debug
按鈕 -
鼠標(biāo)右鍵 菜單下的
debug
- 快捷鍵:
Alt+Shift+D
(可自行更換)
方式一:
方式二:
2、調(diào)試界面解釋
點(diǎn)擊了調(diào)試按鈕之后,我們 IDEA 的底部會(huì)變成以下形式。既然要開始調(diào)試,我們總得先對(duì)調(diào)試界面有一個(gè)初步的認(rèn)識(shí)不是,因此在下面我對(duì)常用的部分進(jìn)行解釋
1、調(diào)試器
在此界面可查看關(guān)于調(diào)式獲得到的信息,如變量、方法返回值等
2、控制臺(tái)
點(diǎn)擊控制臺(tái)后可以跟我們正常運(yùn)行代碼一樣,在控制臺(tái)中輸入數(shù)據(jù)和查看輸出情況
3、重啟
重新調(diào)試
4、停止
停止當(dāng)前調(diào)試
5、Resume Program
快捷鍵為 F8
,跳到一下個(gè)斷點(diǎn)處
6、Step Over
快捷鍵為 F6
。步過(guò),一行一行地往下走,如果這一行上有方法,直接執(zhí)行完該方法的內(nèi)容,不會(huì)進(jìn)入方法里面。
7、Step Into
快捷鍵為 F5
。步入,如果當(dāng)前行有方法,可以進(jìn)入方法內(nèi)部,一般用于進(jìn)入自定義方法內(nèi),不會(huì)進(jìn)入官方類庫(kù)的方法。
8、Step Out
快捷鍵為 F7
。步出,從步入的方法內(nèi)退出到方法調(diào)用處,此時(shí)方法已執(zhí)行完畢,只是還沒(méi)有完成賦值。
9、Force Step Into
快捷鍵為 Alt + Shift + F7
。強(qiáng)制步入,能進(jìn)入任何方法,查看底層源碼的時(shí)候可以用這個(gè)進(jìn)入官方類庫(kù)的方法。
10、Run to CursorCtrl+R
。運(yùn)行到光標(biāo)處,你可以將光標(biāo)定位到你需要查看的那一行,然后使用這個(gè)功能,代碼會(huì)運(yùn)行至光標(biāo)行,而不需要打斷點(diǎn)。
11、Show Execution Point
快捷鍵為 Alt + F10
。如果你的光標(biāo)在其它行或其它頁(yè)面,點(diǎn)擊這個(gè)按鈕可跳轉(zhuǎn)到當(dāng)前Debug代碼執(zhí)行的行。
12、Variable窗口
如圖中的紅框,這里顯示當(dāng)前方法里的所有變量。
簡(jiǎn)記
3、步過(guò)、步入和強(qiáng)制步入?yún)^(qū)別
這三個(gè)按鈕的功能各有千秋,都具有進(jìn)行到下一步的功能。當(dāng)我們寫的 bug 不同時(shí),我們就得用到不同的按鈕,下面我用表格列出三者的不同
是否可跳轉(zhuǎn) | 是否可進(jìn)入自定義方法 | 是否可進(jìn)入類庫(kù)方法 | |
---|---|---|---|
步過(guò) | ? | ? | ? |
步入 | ? | ? | ? |
強(qiáng)制步入 | ? | ? | ? |
4、調(diào)試案例
4.1、創(chuàng)建User類
public class User {
private int id;
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.2、創(chuàng)建UserTest調(diào)試類
import java.util.ArrayList;
import java.util.List;
/*
* 1、靜態(tài)方法不能直接調(diào)用非靜態(tài)方法。
* 2、靜態(tài)方法和變量可以在類被加載時(shí)就被訪問(wèn),而非靜態(tài)方法和變量需要在該對(duì)象創(chuàng)建后才能被訪問(wèn)。
* 3、如果想在靜態(tài)方法中訪問(wèn)非靜態(tài)方法或者變量,則需要先創(chuàng)建一個(gè)對(duì)象,然后在靜態(tài)方法里面通過(guò)對(duì)象去訪問(wèn)非靜態(tài)方法。
* */
public class UserTest {
// 非靜態(tài)方法,獲取User列表
public List<User> getUserList(){
User user1 = new User(1,"張三");
User user2 = new User(2,"李四");
User user3 = new User(3,"王五");
// 注意List是接口,接口不能直接實(shí)例化,需要通過(guò)它的實(shí)現(xiàn)類
List<User> users= new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
return users;
}
public void syTest(){
System.out.println("斷點(diǎn)回退前");
System.out.println("回退后");
}
public void allTest(int[] array){
for (int i : array) {
if (i==1){
System.out.println(1);
}else if (i==2){
System.out.println(2);
}else if (i==3){
System.out.println(3);
}else if (i==4){
System.out.println(4);
}
else {
System.out.println(5);
}
}
}
// 主程序入口,靜態(tài)方法
public static void main(String[] args) {
int[] array={1,2,3,4,5};
UserTest userTest = new UserTest();
// 在靜態(tài)方法里面調(diào)用非靜態(tài)方法,需要通過(guò)對(duì)象去調(diào)用。
userTest.allTest(array);
List<User> users= userTest.getUserList();
// 帶條件的斷點(diǎn)
for (User user : users) {
System.out.println(user.getId());
}
// 斷點(diǎn)回退
userTest.syTest();
// 執(zhí)行中斷 force return
userTest.allTest(array);
}
}
4.3、具體調(diào)試
1、常用調(diào)試
在userTest.allTest(array) 打一個(gè)斷點(diǎn),點(diǎn)擊Debug
2、帶條件的斷點(diǎn)
在System.out.println(user.getId());打一個(gè)斷點(diǎn),鼠標(biāo)右鍵斷點(diǎn),編寫調(diào)試條件
3、斷點(diǎn)回退(只能用在方法里面)
在userTest.syTest() ,打一個(gè)斷點(diǎn),Step Into進(jìn)入方法后,點(diǎn)擊Step Over,我們可以看到,左下角框有Reset Frame(斷點(diǎn)回退),點(diǎn)一下它,就回到之前執(zhí)行斷點(diǎn)之前的位置,再次重復(fù)該操作,查看控制臺(tái)輸出內(nèi)容。
4、執(zhí)行中斷(Force Return)
在userTest.allTest(array),打一個(gè)斷點(diǎn),Step Into進(jìn)入方法后,按Step Over,會(huì)跟著內(nèi)容逐個(gè)輸出1,2,3,4,5。假設(shè)在開發(fā)環(huán)境中,輸出3之后就到了數(shù)據(jù)庫(kù)的更新操作,但我們并不想去更新數(shù)據(jù)庫(kù)的內(nèi)容,即到輸出3的時(shí)候就終止執(zhí)行。即來(lái)到3的時(shí)候,在Threads & Variable 右鍵,選擇Force Return,就不會(huì)繼續(xù)執(zhí)行下去了。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-734262.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-734262.html
到了這里,關(guān)于小白如何進(jìn)行代碼調(diào)試Debug(IDEA 2023版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!