小白如何进行代码调试Debug(IDEA 2023版)

本文详细介绍了在IntelliJIDEA中进行断点调试的步骤,包括设置断点、Debug调试方法,以及区分步过、步入和强制步入的区别。通过User类和UserTest类的示例,展示了如何在实际项目中应用这些调试技巧。
摘要由CSDN通过智能技术生成

前言

本篇文章主要介绍如何进行断点调试

1、开始调试

开始调试主要分为两步,第一为设置断点,第二才进行调式操作。

1、设置断点

设置断点的方法基本上大多数的 IDE 都一致,当我们在代码行上的数字旁鼠标左键点击一下,便设置断点成功(可设置多个断点)。断点还可以进行其余设置
在这里插入图片描述

2、Debug调试

启动调式主要有以下三种方法:

  1. 工具栏点击小甲虫样式debug 按钮
  2. 鼠标右键 菜单下的 debug
  3. 快捷键:Alt+Shift+D (可自行更换)

方式一:

在这里插入图片描述

方式二:
在这里插入图片描述

2、调试界面解释

点击了调试按钮之后,我们 IDEA 的底部会变成以下形式。既然要开始调试,我们总得先对调试界面有一个初步的认识不是,因此在下面我对常用的部分进行解释

在这里插入图片描述

1、调试器
在此界面可查看关于调式获得到的信息,如变量、方法返回值等

2、控制台
点击控制台后可以跟我们正常运行代码一样,在控制台中输入数据和查看输出情况

3、重启

重新调试

4、停止

停止当前调试

5、Resume Program

快捷键为 F8,跳到一下个断点处

6、Step Over
快捷键为 F6步过,一行一行地往下走,如果这一行上有方法,直接执行完该方法的内容,不会进入方法里面。

7、Step Into
快捷键为 F5步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法。

8、Step Out
快捷键为 F7步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。

9、Force Step Into
快捷键为 Alt + Shift + F7强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。

10、Run to Cursor
Ctrl+R运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。

11、Show Execution Point
快捷键为 Alt + F10 。如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前Debug代码执行的行。

12、Variable窗口
如图中的红框,这里显示当前方法里的所有变量

在这里插入图片描述

简记

在这里插入图片描述

3、步过、步入和强制步入区别

这三个按钮的功能各有千秋,都具有进行到下一步的功能。当我们写的 bug 不同时,我们就得用到不同的按钮,下面我用表格列出三者的不同

是否可跳转是否可进入自定义方法是否可进入类库方法
步过
步入
强制步入

4、调试案例

4.1、创建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、创建UserTest调试类

import java.util.ArrayList;
import java.util.List;

/*
* 1、静态方法不能直接调用非静态方法。
* 2、静态方法和变量可以在类被加载时就被访问,而非静态方法和变量需要在该对象创建后才能被访问。
* 3、如果想在静态方法中访问非静态方法或者变量,则需要先创建一个对象,然后在静态方法里面通过对象去访问非静态方法。
* */

public class UserTest {
	//	非静态方法,获取User列表
	public List<User> getUserList(){
		User user1 = new User(1,"张三");
		User user2 = new User(2,"李四");
		User user3 = new User(3,"王五");
		//	注意List是接口,接口不能直接实例化,需要通过它的实现类
		List<User> users= new ArrayList<>();
		users.add(user1);
		users.add(user2);
		users.add(user3);

		return users;
	}

	public void syTest(){
		System.out.println("断点回退前");
		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);
			}
		}
	}

	// 主程序入口,静态方法
	public static void main(String[] args) {
		int[] array={1,2,3,4,5};
		UserTest userTest = new UserTest();
		// 在静态方法里面调用非静态方法,需要通过对象去调用。
		userTest.allTest(array);
		List<User> users= userTest.getUserList();

		// 带条件的断点
		for (User user : users) {
			System.out.println(user.getId());
		}

		// 断点回退
		userTest.syTest();

		// 执行中断 force return
		userTest.allTest(array);

	}
}

4.3、具体调试

1、常用调试

在userTest.allTest(array) 打一个断点,点击Debug

在这里插入图片描述

2、带条件的断点

在System.out.println(user.getId());打一个断点,鼠标右键断点,编写调试条件

在这里插入图片描述

3、断点回退(只能用在方法里面)

在userTest.syTest() ,打一个断点,Step Into进入方法后,点击Step Over,我们可以看到,左下角框有Reset Frame(断点回退),点一下它,就回到之前执行断点之前的位置,再次重复该操作,查看控制台输出内容。
在这里插入图片描述

在这里插入图片描述

4、执行中断(Force Return)

在userTest.allTest(array),打一个断点,Step Into进入方法后,按Step Over,会跟着内容逐个输出1,2,3,4,5。假设在开发环境中,输出3之后就到了数据库的更新操作,但我们并不想去更新数据库的内容,即到输出3的时候就终止执行。即来到3的时候,在Threads & Variable 右键,选择Force Return,就不会继续执行下去了。

在这里插入图片描述
5、结束 for 循环(Step Out of Code Block)

当 debug 进入 for 循环后,可以点解 Step Out of Code Block 快速跳出当前 for 循环。

在这里插入图片描述

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
调试IDEA 2023时,可以通过Debug窗口来跟踪代码执行。该窗口在访问请求到达第一个断点后自动激活。如果未自动激活,可以在设置中进行相应配置。 有时候,在单步调试过程中,可能会遇到请求进来的中文在打印到控制台时乱码的情况。解决这个问题的一种方法是在IDEA的配置文件中添加 `-Dfile.encoding=UTF-8` 配置。这样配置后,所有的项目都能够正常处理中文字符。需要注意的是,只需在IDEA的配置文件中添加一次该配置,其他地方无需再次配置。 要找到IDEA的配置文件,可以在安装目录的bin目录下找到 `idea64.exe.vmoptions` 文件,然后在该文件中添加 `-Dfile.encoding=UTF-8` 配置。这样做的原因是为了确保IDEA能够正确处理中文字符。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [在Intellij IDEA中使用Debug](https://blog.csdn.net/Dome_/article/details/80638221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [IDEA 2023 的常用配置](https://blog.csdn.net/swerfse/article/details/123439639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值