我将借着下面的例子在eclipse中对其进行调试。代码简单就不加注释了。
package debugtest;
public class Example {
public static void main(String[] args) {
int[] m = new int[10];
for (int i = 0; i < 4; i++) {
m[i] = i;
}
int k = 5;
for (int i = 9; i >=4; i--) {
m[i] = i-k;
k = k-2;
}
prin(m);
System.out.print("max为:");
int a = max(m);
System.out.println(a);
}
public static int max(int[] m) {
int ma = m[0];
for (int i = 0; i < 10; i++) {
if(ma<m[i]) {
ma = m[i];
}
}
return ma;
}
public static void prin(int[] m) {
for (int i = 0; i < m.length; i++) {
System.out.println("m["+i+"]="+m[i]);
}
}
}
简单Debug调试。
第一步,打断点。在你需要程序暂停运行的地方左键双击就可以。如下,我在代码第五行的位置打了个断点,断点也可以在不止一处地方打。
第二步,Debug运行(右击程序后选择Debug As运行),会发现程序停在了打的断点处,选择Debug视图,方便观察变量变化情况(图右侧),如下图。
第三步,快捷键或者鼠标点击工具栏进行程序调试。
F5 单步执行,若是函数,会进入方法,包括自定义方法和jdk源码的方法。
当程序执行到这里时,若直接F6,则不会进入max(m)函数,F5则会进入其中。
且注意看变量,原先main函数中的局部变量已经变成max函数中的局部变量了。
F6 单步执行,遇到方法不会进入,仅当一条语句执行。
调试的时候注意看变量的变化,例子简单很容易理解,但若遇到逻辑问题很难发现时,代码调试的好处就体现出来了。
F7 跳出当前正在debug调试的方法,main函数无法跳出。
进入max函数后点击F7,跳出max函数返回main函数中。
F8 执行到下一个断点,若没有断点程序执行完毕。
这里我打了两个断点,第5、14行,如果单步执行,需要经过两个for循环,这是直接F8则直接从第五行断点到第14行断点。
条件断点。
先掌握了以上那些调试方法后,想一下,如果有一个循环10000次的for循环,你该如果去调试,或者说我想看看它循环五千次后变量的数据什么样,这个时候上面那些方法就不够用了。此时就需要用到条件断点,顾名思义,满足条件的时候断点才生效。如下,我想看一下i=6时,程序停,这个时候,首先也是左键双击断点后生成正常的断点。然后右击断点后选择最下面的breakpoint properties..会出现如下窗口,选中Conditional就可以添加条件了。再应用并关闭窗口,条件断点就生成成功了。
如下所示,程序到i == 6时暂停。