xukun245 2014-11-13 18:31
浏览 725

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模式)去找问题.

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥20 iqoo11 如何下载安装工程模式
    • ¥15 本题的答案是不是有问题
    • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
    • ¥15 C++使用Gunplot
    • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
    • ¥15 matlab数字图像处理频率域滤波
    • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
    • ¥15 ELGamal和paillier计算效率谁快?
    • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
    • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?