程序调试方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序调试方法

李应洪2005-8-12

一、CommConstants.java文件的写法,里面注意按模块写。‘是’和‘否’用‘1’、‘0’

二、Tomcat无法启动,先查看log,也行是java文件未完全编译,也有可能是web.xml或者Config.xml

文件配置问题。

三、Java程序

1.在发生异常的时候,我们是先尽快定位到关键的地方,如找不到,先不要急于每个方法里面

去单步跟踪Step into,而是先在几个自认为可能出错的程序段上Step over,肯定会找出是某

个段出现问题,然后在逐渐细化。

2.调试主要看一下几个关键点:设置断点Breakpoints,查看变量Variables,添加表达式

Expressions,查看控制台console。

3.设置断点:一般是在关键地方设置断点,先找到关键点,然后将该关键点细化;再在关键点

里面设置断点,依次找出Bug。

4.查看变量Variables:在程序运行的当前java类里面,可以查看该类里面的任何属性(包括

Entity,Entity又有属性),这样一层一层的查看参数与变量的值。

5.单步跟踪到每个方法里面Step into,跟踪某个语句Step over,跟踪某方法侯返回Step return。

6.添加表达式:表达式其实是属于变量的一部分,当你想关注确定的变量的时候,可以通过添

加表达式来调试更为直观。

7.查看控制台:控制台是我们找出Bug关键点的平台。在控制台里面可以直接定位到某个文件

的某个具体的方法或者某个语句,而且可以在控制台直接链接到对应的语句去。

8.Java文件的错误除了了在控制台会出现外,在Jsp页面还会出现。在Jsp页面出现的Java文

件的错误,也会表现的页面,同时会指出出错的地方。定位到行代码。

9.Java程序出错频率最高的地方:

1)空指针NullPoint,当一个class或者变量为null的时候,如果你在调用它的方法,系统

会抛出空指针异常。一般会有:

a)rkdBiz= (CC_RkdBiz)

BaseObjectFactory.getBaseObject("_RkdBiz");

如果rkdBiz=null,再rkdBiz.insert();就会出现异常。因此,需要先再ClassFactory.xml

文件里面先配置实例化文件。

b)CC_RkdEntity rkdEntityTemp = this.selectRkd(conn, ryEntity, rkdEntity.getRkdID());

if (rkdEntityTemp != null)

{

// 组织数据

rkdEntityTemp.setGysMc(rkdEntity.getGysMc());

}

c)for (int i = 0; i < rkdEntity.getRkdMxEntityArray().length; i++)

{

//需要加上rkdEntity.getRkdMxEntityArray()!=null的判断

}

d)// 获得最大ID,转化为long型,赋值给实体对应的属性

SequenceNoSeeker sequenceNoSeeker = new SequenceNoSeeker();

rkdEntity.setRkdID(Long.valueOf(sequenceNoSeeker.nextSequenceNo(conn,

"BIZ_RKD", null).toString())

如果没有再Sequence.xml文件里面配置sequence就会抛出空指针异常。

e)// 入库单主单实体

private CC_RkdEntity rkdEntity = new CC_RkdEntity();

在Form里面如果定义一个实体的时候,没有new的话,在Jsp页面上使用

会抛出空指针

异常。

f)// 物资编码

private String[] strWzbm = null;

在Form里为了组织Jsp页面提交的数据,定义数组字符串,如果得到的数组为null,再使用rkdEntity[i].setWzbm(strWzbm[nIndex]);就会抛出空指针异常。

因此,再Form里面定义的数组命名必须与Jsp页面使用的一样。

比如:Jsp使用

那么:Form里面就得String[] strRkdMxBh = null;

2)SQL异常,肯定都是Dao里面书写错误。

a)字段的个数与“?”的格式不等

b)缺少或者多“,”

c)缺少或者多“(”

d)Dae类型的字段忘记了to_date(?,’ yyyy-mm-dd’)

e)sbWhere.append(" RKDBH ="+ SqlReplace.sqlReplace(rkdEntity.getRkdBh(),

SqlReplace.BLUR_SEARCH_V ALIDATE) + " and "); 象这样的也会出现异常。

f)where条件里面缺少连接符“and”等

其实这些问题都是比较低级的错误,大家再Copy别人的代码的时候要千万注意,因此要求每个人再写Sql的时候统一风格,并写明注释。

3)查询得不到想到的结果

a)Dao里面指定的返回Entity和自己想要的返回Entity不一致。如:

objs = SqlUtil.parseDataEntityBeans(rs, "", "_RkdEntity");

或者Entity的路径写错,Entity的名字写错,都会出现这种情况。这种异常不会抛

出来的,而且再控制台打印出来的SQL拿到数据库去执行不会发生任何异常。

一旦发生这种情况,需要先执行打印出来的SQL,然后跟踪查询结果返回的Entity

是否有值。

b)查询出来了结果,但是Entity的某些属性(某些列)的值不是自己所希望的。

可能是Entity里面的方法写的有问题,多数情况是赋错了变量。

public void setGysMc(String gysMc)

{

strGysMc = gysMc;

}

从数据库执行查询后,给实体赋值都是通过Entity里面的“set”方法。

c)情况a)、b)都没发生,但是Jsp页面就是去不到某个属性的值,这种情况就是“get”

方法有问题,因为我们再页面取值都是通过“get”方法。

d)如果是long、double类型的属性,再页面没法取值,最有可能的就是没有重载“set”

方法。如:

public void setZt(BigDecimal dbZt)

{

相关文档
最新文档