巧用栈信息定位BUG

在我写的SeleniumGUI工具里面,有一个功能,当前的脚本有改动时,在新建脚本、打开其它脚本、关闭程序时,会提示当前脚本有改动,是否要保存。但是有一个BUG,就是当前脚本没有做任何改动时,有时也会弹这个提示,甚至刚打开程序,什么也不做,关闭程序,也会弹提示,这就很懵逼了。这个BUG,最开始的时候,我就发现了。只是原先简单地调试,没有找到问题的所在,以为是随机BUG,也由于影响不是很大,暂时没有处理。只是,现在由于之前公司的同事,使用这个软件,顺带提起了这件事,就想着把它解决掉,那么我又是怎么解决这个BUG的呢?

首先,在我的程序里,有一个容器,实际上就是一个单例类,里面存放的都是一些全局性的变量或是对象。脚本是否有改动,也是在这里面,用一个变量来维护的。

当脚本作出改动时,会调用这个方法,将changeFile置为true,在新建脚本等操作时,就会判断一下这个值是否为true。如果为true就弹提示。现在是脚本并没有做出改动,也弹提示了,那就说明调用了setChangeFile方法。如果能够知道是谁调用了这个方法,不就可以找出问题的所在了么。要知道这个方法被谁调用了,就需要追踪栈信息,于是在这个方法里加一些代码:

	public static void setChangeFile(boolean b){
		StackTraceElement[] elems = Thread.currentThread().getStackTrace();
		System.out.print(String.valueOf(b) + ":::");
		for(StackTraceElement elem : elems){
			System.out.print(elem.getClassName() + "." + elem.getMethodName() + "()---");
		}
		System.out.println();
		domain.changeFile = b;
	}

加的这些代码,就是将当前线程的方法调用的栈信息,都打印出来。

然后,运行程序,在程序界面上,不改动脚本的情况下,做操作,实际上就是鼠标移来移去,然后就发现是在复选框,鼠标移入移出的时候,会调用这个方法。这样就定位到了BUG的所在,原来是复选框加的监听器不对,改过来就行了,BUG解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值