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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题