🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:【Java】内容概括
【前言】
在Java开发过程中,调试是一项不可或缺的技能。无论你是经验丰富的开发者,还是初入编程世界的新手,都难免会遇到代码出错的情况。有效的调试能帮助我们快速定位并解决问题,提高开发效率。本文将深入探讨Java调试的各种技巧和工具,带你全面掌握Java调试技能。
文章目录:
一、调试的概念
1.什么是调试
- 调试是指在程序运行过程中,通过各种手段观察程序的执行状态、变量值的变化等,以找出程序中存在的错误或异常的过程。它就像是给程序做“体检”,帮助我们发现并修复代码中的“健康问题”。
- 调试的⼀般途径是采⽤各种⽅法逐步
缩⼩ bug
所在的范围,最终定位bug
的准确位置。
2.常见的错误类型
- 语法错误:这是最基本的错误,例如拼写错误、缺少分号、括号不匹配等。Java编译器会在编译阶段检测到语法错误,并给出相应的错误提示。
- 逻辑错误:程序语法正确,但运行结果不符合预期。这类错误通常是由于算法设计不当、条件判断错误或变量赋值错误等引起的,调试时需要仔细分析程序逻辑。
- 运行时错误:程序在运行过程中抛出异常,如空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)等。这类错误需要通过调试来找出异常发生的位置和原因。
3.常见的调试方式
1.阅读代码与日志打印
- 适用于代码量短小
- 常见的方式是逐行阅读代码和插入一些打印语句观察代码的问题(这也是我们在学习过程中常用的)
2.使用工具
- 适用于复杂程序
- 使用集成开发工具中集成的调试器
二、使用IDEA调试Java程序
1.设置断点
断点是调试过程中最重要的工具之一。在代码编辑器中,点击代码行号旁边的空白区域,即可设置断点。当程序运行到断点处时,会暂停执行,此时我们可以查看程序的执行状态。
eg:用下面这串代码举个例子
public class Test {
public static void main(String[] args) {
print(123);
}
public static void print(int n){
System.out.println(n);
}
}
2.如何启动调试
方法一:鼠标右键,点击Debug…
方法二:点击工具栏中的调试按钮(这个虫子标志)如下图:
注意
:当这里有多个项目时,需要选中
第一种方法就不用
3.逐过程
- 逐行(hang)执行,不进入方法的内部
- 快捷键:Step Over
(F8)
4.逐语句
- 进入方法内部执行
- 快捷键:Step Over
(F7)
5.强制步入功能
Force Step Into
是一种强制步入功能,它允许调试器进⼊任何⽅法,包括那些通常会被 Step Into 功能跳过的⽅法。
快捷键:
Alt + Shift + F7
与普通 Step Into 的区别:
- 普通 Step Into (F7) 通常会跳过库⽅法、⽆源代码的⽅法等。
- Force Step Into 会进⼊任何⽅法,包括那些通常被跳过的⽅法。
6.跳出功能
- 跳出当前⽅法,它让程序执⾏完当前⽅法的剩余部分,然后返回到调⽤该⽅法的位置。快速完成当前⽅法的执⾏。
- 快捷键:Step Out
(Shift + F8)
eg:用下面这串代码举个例子
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = sum(a,b);
System.out.println(ret);
}
public static int sum(int x,int y){
System.out.println("hello");
return x + y;
}
}
7.运行到光标所在位置
快捷键:Alt + F9
8.重新调试
快捷键:ctrl + F5
9.跳到下一个断点
10.暂停调试
快捷键:ctrl + F2
11.显示所有断点
- 是⼀个集中管理所有断点的界⾯,可以查看、编辑、启⽤/禁⽤或删除断点。
- 快捷键:
Ctrl + Shift + F8
12.屏蔽断点
临时禁⽤所有断点的功能,⽽不需要逐个禁⽤或删除它们
13.Debugger标签下调⽤堆栈以及变量等表达式的值
标有 “Evaluate expression (Enter) or add a watch”,这⾥可以输⼊表达式进⾏求值或添加到监视列表
14.Console标签下会展⽰控制台的输⼊输出信息
15.条件断点
当⼀个代码需要满⾜某种条件进⾏调试,此时可以使⽤调试断点
- 打断点
- 右键,添加条件
eg:用下面这串代码举一个例子
public class Test {
public static void main(String[] args) {
for (int i = 0; i <= 500; i++) {
if(i == 100){
System.out.println(i);
}
}
}
}
三、实践
求斐波那契数列的第 N 项
public class Test {
public static void main(String[] args) {
int f1 = fib(1);//第1项
int f2 = fib(2);//第2项
int f3 = fib(3);//第3项
int f4 = fib(4);//第4项
int f5 = fib(5);//第5项
int f6 = fib(6);//第6项
System.out.println(f1);
System.out.println(f2);
System.out.println(f3);
System.out.println(f4);
System.out.println(f5);
System.out.println(f6);
}
public static int fib(int n){
if(n == 1 || n == 2){
return 1;
}
int ret = fib(n-1)+fib(n-2);
return ret;
}
}
【总结】
本文介绍了Java调试的基础知识。通过掌握这些调试技巧和工具,可以大大提高我们排查Java代码问题的效率,使开发过程更加顺畅。在实际开发中,要根据具体情况灵活运用各种调试方法,不断积累调试经验,提升自己的编程能力。希望本文对你在Java调试方面有所帮助,祝大家编码愉快,bug-free!