首页技术文章正文

如何使用debug

更新时间:2018-09-18 来源:黑马程序员JavaEE培训学院 浏览量:

一、Debug课程引言

我们在写程序的时候,会经常出现一些问题也叫bug(如程序运行报错,结果与预期不符等),面对这些问题,特别是对于初学者而言,会有很大的困扰,在解决问题的过程中会消耗大量的时间,因为没有掌握解决问题的方式。

所以我觉得有必要开发一套课来提高大家解决问题的能力,因为不管对于现在学习而言,还是对于日后的工作而言,解决bug是一个非常重要的能力。因为bug无处不在,可以说bug是伴随我们开发的伴侣,只有我们能征服这些bug,才能征服开发工作。


二、Bug分类

程序中的错误大致分为两种,编译时错误和运行时错误。

1.   编译时错误

这种问题基本都是一些语法错误,哪里有红色波浪线,哪里就有问题。

a.        类名,方法名,变量名写错了

b.        标点符号写错了

c.         括号不匹配

d.        修改了代码,没有保存

e.        方法中少了return语句

以上这些问题都是最最最最最最基本的语法格式问题,必须知道怎么解决,这不是我们此次课程的重点。


2.   运行时错误

程序运行时出现的bug才是我们课程的重点。

程序运行时出现错误的原因就比较复杂了,有下面几种情况

a. 程序不能正常执行,报错(如NullPointerException)

b. 程序可以正常执行,但结果不对


上述这些bug出现的原因就比较复杂,特别是那种看起来没问题,执行也没报错,但是结果就是不对的代码,很头疼。这个时候就需要我们用到专业的Debug工具来调试程序。


三、Debug应用

为了让大家能够熟悉debug调试工具,提高解决bug的能力,在基础班的各个阶段分别设置一个有bug案例,用debug调试的方式来查找问题。

有句老话叫“授人以鱼不如授人以渔”,通过学习这些案例,希望大家以后遇到问题首先能够自己解决。大家毕业之后工作了,拿着别人的工资,那个时候遇到了bug,谁能帮你解决,只能自己想办法解决。

1.   Debug案例1

//基本类型作为参数

    public static void show(int a){

       a=a+1;

    }

   

    //引用类型作为参数

    public static void show(int[] arr){

       arr[0]+=1;

    }

2.   Debug案例2

/*

     * 分析以下需求,并用代码实现(循环,if):

       (1)打印1到100之内的整数,但数字中包含9的要跳过

       (2)每行输出5个满足条件的数,之间用空格分隔

       (3)如:1 2 3 4 5

     */

    public static void function3(){

       int count=0;  

       for(int i=1;i<100;i++){

           if(!(i%10==9||i/10%10==9)){

              System.out.print(i+" ");

              count++;      

           }

           

           if(count%5==0){

              System.out.println("");

           }

       }

}


执行结果如下:在38和40之间多了一个空行

.....省略......

34 35 36 37 38


40 41 42 43 44

.....省略......

3.   Debug案例3

public class Fu {

    int a;

    public Fu() {

       a=20;

       show();

    }

    public void show(){

       System.out.println(a);

    }

}


public class Zi extends Fu{

    int a;

    public Zi() {

       a=20;

    }

    public void show(){

       System.out.println(a);

    }

    public static void main(String[]args){

       Zi z=new Zi();

       z.show();

    }

}

打印结果为:

0

20


4.   Debug案例4

下面字符串中”java”出现的次数

“sunjavahpjavaokjavajjavahahajavajavagoodjava”

String s ="sunjavahpjavaokjavajjavahahajavajavagoodjava";

        int count = 0;

        int index=0;

        while (s.indexOf("java") != -1) {

            index = s.indexOf("java", index);

            if (index != -1) {

                index = index + 1;

                count++;

            }

        }

        System.out.println(count);


5.   Debug案例5

public static void main(String[] args) {

      getDir(newFile("C:\\"));

}

   

    /*

     * 打印输出指定目录下所有的.java文件(包含子目录)

     */

    public static void getDir(File dir){

        File[] files = dir.listFiles();

        for(File f:files){

            if(f.isDirectory()){

                getDir(f);

            }else{

                if(f.getName().endsWith(".java")){

                    System.out.println(f);

                }

            }

        }

      }

Exception in thread "main" java.lang.NullPointerException

atcn.itcast.demo1.Demo4.getDir(Demo4.java:15)

atcn.itcast.demo1.Demo4.getDir(Demo4.java:17)

atcn.itcast.demo1.Demo4.getDir(Demo4.java:17)

atcn.itcast.demo1.Demo4.main(Demo4.java:7)


本文版权归黑马程序员JavaEE学院所有,欢迎转载,转载请注明作者出处。谢谢!

作者:黑马程序员JavaEE培训学院

首发:http://java.itheima.com/


分享到:
在线咨询 我要报名
和我们在线交谈!