Java程序调试技巧浅析

开发 后端
本文向您介绍Java程序调试的一些技巧,包括Boolean量和断言语句的使用等,希望对您有所帮助。

用Java这么久,说来惭愧,大部分情况下使用的调试语句是:System.out.println("value:"+value);这种形式,这两天看了些关于Java程序调试技巧的东西,总结一下,以后要积极使用:

一:一种很简单的方法就是使用一个boolean量如:debugMode,需要看看程序的输出时可以使用:if(debugMode)System.out.println("..");

在项目完毕后把debugMode变量设为false;这种方法的不足是:为了启动或者禁止debug,必须改动代码

二:一个比上述方法稍好的是:使用Java -D:如:Java -Ddebug=true MyClass,在使用这种方法时,必须在你所有的class中添加System.getProperty("debug")来取得调试标志,这样***种方法的使用,就改为:

public static final boolean debug;  
   static{  
      String sDebug=System.getProperty("debug");  
      if(sDebug!=null && sDebug.equalsIngnoreCase("true"))  
         debug=true;  
      else 
         debug = false;  
   } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

这样在不更改source code的情况下可以直接修改Java程序调试标志,但是这样不够灵活,比如你不能指定哪一部分使用调试功能,而只是要使用调试功能就必须在代码的全部使用,这样就引出了第三种调试方法,可以定义一个用于调试的类。

  public class DebugManager {  
 
 public static final String SYSTEM_DEBUG_KEY="system.Debug";  
 public static final boolean debug;  
 static {  
     debug = toBoolean(SYSTEM_DEBUG_KEY);  
 }  
 private static boolean toBoolean(String key){  
  boolean debug;  
  String sDebug = System.getProperty(key);  
  if(sDebug != null && sDebug.equalsIgnoreCase("true"))  
   debug = true;  
  else 
   debug =false;  
  return debug;  
 }  
   
 public static boolean getSystemDebug(){  
  return debug;  
 }  
 public static boolean getSystemDebug(String applicationKey) {  
  if(debug || toBoolean(applicationKey))  
   return true;  
  else 
   return false;  
 }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

这样对于一个application(Test)可以着牙功能调用:
   boolean debug =DebugManager.getSystemDebug(applicationKey);

要打开Test的调试功能,只需:

java -DTest.Debug=true Test

当然这个类可以进行进一步扩展,比如将其变为日志管理,控制调试信息的输出位置等

三、使用断言

断言是Merlin(jdk1.4)中一项新功能,默认情况下不使用断言,但是programmer可以在任何时候enable或者disable这项功能,从而可以在测试时启用断言验证,而在部署时禁用断言验证,而程序运行时若用户碰到问题时再重新启用断言。断言检查,失败时不会抛出

Exception,而是抛出AssertionError,

1,断言的两种语法形式:

     (1)assert booleanExpression;

      (2) assert boolExpression:message; //message将作为错误抛出后的结果显示

assert必须位AssertTest于可执行快中,不能将assert和实例的类变量一起使用,但可以将其放在任何方法内。

2,在Java程序调试中启用断言:

编译:javac -source 1.4 AssertTest.java

运行:java -ea AssertTest (参数)

-ea是启用断言的简易方法,但是-ea不能用于系统类,

(1)若要对系统类使用断言:则需:-enablesystemassertions,或者-esa

(2)若要对这个package启用断言:要在-ea后加(:,package的名字,...)如对test.util包及其所有的子包启用断言,则可以java -ea:test.util... AssertTest

 

【编辑推荐】

  1. 关于Java反射机制的一个实例
  2. 在Java应用程序中使用Jfreechart配置
  3. 浅谈为什么Java接口中不允许定义变量
  4. Java的异常和断言学习笔记
  5. 关于Java继承的一些复习
责任编辑:佚名 来源: 网络转载
相关推荐

2022-12-25 18:03:13

Debug原理软件

2013-04-10 09:46:29

EclipseJava

2013-06-03 11:24:45

程序调试Java

2009-07-29 10:52:09

数据采集程序ASP.NET技巧

2021-02-20 11:04:40

C++VS代码调试

2009-07-14 11:34:42

MyEclipse断点JavaScript

2021-08-26 05:04:53

JavaScript调试技巧

2009-10-14 14:37:56

调试.NET程序

2009-07-29 11:33:14

ASP.NET技巧ASP.NET应用程序

2009-12-11 10:59:48

PHP函数extrac

2019-06-14 14:15:07

Javascript调试技巧代码

2013-04-18 10:19:40

iOS开发Xcode调试

2013-05-17 10:54:37

iOS开发iOS SDK调试技巧

2009-09-18 14:09:57

SQL CLR存储过程

2017-03-07 13:52:38

程序员调试片断

2009-07-15 09:29:24

Java程序员

2009-06-03 14:42:21

Eclipse调试调试Java程序

2009-07-29 13:42:25

ASP.NET注释

2018-03-12 10:15:10

前端Javascript反调试

2024-11-25 16:08:57

Python代码代码调试
点赞
收藏

51CTO技术栈公众号