在线排版不太好看,介意的读者可下载word下来看:https://download.csdn.net/download/xijinno1/87441301
IDEA下java程序的简单调试-System.out.println
首先本次进行调试的一个程序是实现从1累加到100的功能,是在IDEA下进行编写的。如图所示:
public class Demo {
public static void main(String[] args) {
int i; //用于做临时变量
int sum = 0; //用于存放累加的结果
for (i = 1; i <= 100; i++) {
sum += i;//每次循环进行的累加
// System.out.println("第“+i+”次循环,sum的值为 " + sum); // 输出
}
System.out.println("从1加到100的结果是:" + sum); // 输出
}
}
将其运行之后得到的结果如图所示:

把
// System.out.println("第“+i+”次循环,sum的值为 " + sum); // 输出
语句取消掉注释之后再运行一次得到的结果如图所示:

这里由于输出结果太多,所以只截取到了一部分。不过可以看到,在加了这个循环中的输出语句之后,就可以清楚的看到每次循环所经历的一个过程,所得到的结果。
当然不仅只能这样来进行观察程序的运行,我们可以使用IDEA的Debug功能。在编程的时候使用Debug有很多的好处,比如说能够跟踪变量,可以看到变量值的变化。或者是能够迅速的找到程序中所出现的错误。
这种调试的方式能看到的信息比较少,操作也相对较多,下面叙述一下用断点的方式进行调试。
IDEA下java程序的简单调试-Debug
实例程序还是如下程序(实现从1累加到100):
public class Demo {
public static void main(String[] args) {
int i; //用于做临时变量
int sum = 0; //用于存放累加的结果
for (i = 1; i <= 100; i++) {
sum += i;//每次循环进行的累加
// System.out.println("第“+i+”次循环,sum的值为 " + sum); // 输出
}
System.out.println("从1加到100的结果是:" + sum); // 输出
}
}
首先要设置断点
(方法:在一个有效的代码行左边的空白处,行号后面,如下图红框处点击),设置成功后如图所示:

断点表示当手动Debug来运行程序时,程序会在断点之前停止运行。
启动Debug
手动Debug有如下几种
方法1:
快捷键shift+F9
方法2:
点击如下图的图标

或者,在下方找到调试窗口后选择调试图标,如下图

方法3:
菜单栏依次点击 运行 -> 调试 ...,如下图

启动Debug之后会出现一个Debug的调试窗口,如图所示:

注意:有时候可能会碰到点击调试按钮但是当前调试界面却并不是想要调试的文件的情况,你需要把当前的执行窗口切换过来:

或者直接在要调试的文件左侧点击调试,操作如下图:

一些调试按钮和快捷键
当点击

(快捷键是F7)的时候会执行代码的下一行,如下图所示:

右边显示的sum=0就是我们点击

(快捷键是F7)就能得到的下一行代码执行的内容,右边这个方框也就是变量值的显示区域。同时代码行的右边也能够看到变量的值,这里sum的初始值为0,如下图所示:

再次点击

(快捷键是F7),进入到循环中,i的初始值为1,如图所示:

再点击一次

(快捷键是F7)就能够得到第一次循环后sum的值为1,如图所示:

代码行处也是显示了变量的值,如图所示:

值得一提的是,每运行到一行程序时代码行都会有这种与其他代码行不同颜色的提示。同时main后面的数字也是告诉我们执行到哪一行。如图所示:

这里就是表示执行到main方法得第5行。
左下红色框所在位置显示的是当前压栈的方法,跟栈区运行一样,先进后出,最先压栈的在最下面,最上面的最后压栈,也就是最后一次加载进栈区的方法,而方法名前面显示的数字就是当前调试进度所在的行数。
而如果要直接运行完整个程序就可以点击左边的

(快捷键是F9),就可以得到运行后的结果,结果是在

(中文版

) 里面进行查看。如果想要重新Debug,是点击

(快捷键是Ctrl+F5)。当然要结束Debug,可以点击

(快捷键是ctrl+F2)。 如图所示:

按下F9得到运行得结果,在Console(控制台)中查看,如图所示:

接下来对程序进一步的改进,将循环体放入到一个方法中,整个代码如下:
public class Demo {
public static void main(String[] args) {
sum(); // 调用方法
}
// 定义一个名为sum的方法
public static void sum() {
int i; //用于做临时变量
int sum = 0; //用于存放累加的结果
for (i = 1; i <= 100; i++) {
sum += i;//每次循环进行的累加
System.out.println("第“+i+”次循环,sum的值为 " + sum); // 输出
}
System.out.println("从1加到100的结果是:" + sum); // 输出
}
}
将上述代码放入idea中,同时在第3行打一个断点,结果如图所示:

手动启动Debug后,会出现下图现象(代码运行到main方法的第3行停住):

这个时候如果点击

(快捷键是F8),就会直接往下运行,因为

(快捷键是F8)表示的是步过,就是直接往下走,如果这一行上有方法不会进入到方法体当中,如下图所示:

点击一次

(快捷键是F8)后,直接跳过方法运行到第4行,并且能够直接从Console(控制台)中看到方法运行的结果,如下图所示:

点击第二次

(快捷键是F8) 后,直接结束,如下图所示;

而如果使用的是

(快捷键F7)就能够进入到方法内部,因为

(快捷键F7)表示的是步入,如果当前行有方法就能够直接进入到方法内部,不过只能进入到自行定义的方法中,不能进入到官方类库中的方法。如下图所示:

可以看到左下角的Debug框中也表示了进入到sum方法,运行到第9行。接下来继续点击

(快捷键F7)就和前面所讲的一样,反复进行循环,循环结束后,就得到运行结果,程序结束。
而如果在运行到方法中,想要跳出方法,直接将方法运行结束,就要点击

(快捷键shift+F8),如下图所示:


(快捷键shift+F8)表示的是步出,就是从方法内部回到方法的调用处,如图所示(在方法体内点击

(快捷键shift+F8)之后就直接跳到了第4行 ):

小结
当在对java程序进行调试的时候,如果不要进入方法中查看,就可以直接使用

(快捷键是F8)步过进行查看。如果要进入方法中查看,就需要使用

(快捷键是F7)步入进行查看。在方法之中想要退出到方法调用处需要使用

(快捷键是shift+F8)步出。
还有一个按钮是

(快捷键是Alt+F9),作用是debug时使程序到达光标所在的地方,注意,要程序可以到达的地方,否则程序不会停止在光标处。



(快捷键是shift+F9): 启动Debug

(快捷键是Ctrl+F5):重新Debug

(快捷键是F9):直接运行完整个程序,

(快捷键是ctrl+F2) :结束Debug

(无快捷键) ,本文未实例演示:调试程序时,暂停程序运行

(快捷键是ctrl+shift+F8) ,本文未实例演示:查看程序中的断点

(无快捷键) ,本文未实例演示:屏蔽所有断点,即debug时,即使有断点,程序也不会命中断点。


(快捷键是F8):表示的是步过,直接往下走,如果这一行上有方法不会进入到方法体当中

(快捷键是F7): 执行代码的下一行,如果这一行上有方法会进入到方法体当中

(快捷键shift+F8):表示的是步出,从方法内部回到方法的调用处

(快捷键是Alt+F9):作用是debug时使程序到达光标所在的地方