2 xukun245 xukun245 于 2014.11.14 02:31 提问

java能否动态的在程序中获得出错的值(入参)

现在想对项目中的日志进行改造.方便出问题时的解决效率.(出问题时每次都要对错误进行复现.尤其是流程很长的时候.花了大量的时间和精力).
举个简单的例子.
public class 人 {
private String 身高;
private String 体重;
private int 年龄;
public String get身高() {
return 身高;
}
public void set身高(String 身高) {
this.身高 = 身高;
}
public String get体重() {
return 体重;
}
public void set体重(String 体重) {
this.体重 = 体重;
}
public int get年龄() {
return 年龄;
}
public void set年龄(int 年龄) {
this.年龄 = 年龄;
}
public static void main(String[] args) {
try {
人 r = new 人();
r.set体重("100KG");
r.set年龄( 0/0 );
r.set身高("1.7885".substring(0,4));
System.out.println(r.get体重());
System.out.println(r.get年龄());
r=null;
System.out.println(r.get身高());
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果基本功足够一眼就能看到0/0在运行时会出错的.r=null之后get身高也会报空指针.
在第一次运行时控制台输出了错误
java.lang.ArithmeticException: / by zero
at test.人.main(人.java:29)
人.java文件中的29行,main方法中出了错误.错误原因是 by zero 除数不能为0.
我想问一下能否通过线程或者反射之类的获取到当时运行时的错误值并输出出来.比如
出错方法名 /(PS:算数运算符不知道能不能称之为方法..除法?),出错值 0;
java.lang.ArithmeticException: / by zero
at test.人.main(人.java:29)
这样.
如果我们把0/0改为0/1.在继续运行
100KG
0
java.lang.NullPointerException
at test.人.main(人.java:34)
空指针了.这时候我想要的输出格式是
出错方法名 get身高 出错值 null 或者是
出错方法名 System.out.println 出错值 null
java.lang.NullPointerException
at test.人.main(人.java:34
只举了两个很基础的例子 但在实际项目运行中.这种因为数据错误而导致的下标越界,空指针之类的错误很常见.每次使用前都没有进行if(xx!=null)或if(xx!=null&&xx.size()>0)之类的判断.碰到正常数据即使不判断也不会出问题.一旦出现异常没有判断就会出错.然后我们就要在开发环境检查出错时这字段存的是什么.然后在去找.这字段在哪个流程中存入了不该存的值.

我的目的是完全不用通过开发环境复现 只需要看当时的ERR日志就清楚的知道运行时这个出错的值是什么.(如果是dao在保存对象时出错就用反射打印对象的全部get方法来看)然后在通过搜索info日志去找流程中哪里对这个值改动过(在操作dao的时候输出每个字段的全部信息,输出sql语句).很快就通过日志来确定错误地点.而不是反复的复测.跟踪断点.(debug模式)去找问题.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!