调试时强制exception
是否可以在调试时强制抛出exception。
让我举个例子:我正在调试一些从互联网上下载页面的代码。 当Internet连接丢失或网卡关闭时,应抛出IOException,而不是执行阻塞(在第二行)
URLConnection connection = requestURL.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
我需要一种方法来强制抛出exception, 同时调试代码阻塞,所以我可以跳转到catch块。
我正在使用netbeans BTW。
在执行线程暂停时手动添加Debugging =。
编辑 :换句话说,我需要注入 – 在运行时调用exception,而不影响当前代码!
谢谢。
我会找到正在等待的变量,并在eclipse的表达式窗口中,对该变量调用notify,然后我将使该变量null
,以便synchronized块将抛出NullPointerException
。
在eclipse Debug透视图中,在Expressions视图中,只需添加新表达式: throw new Exception("test")
。 我认为NetBeans有类似的东西。
我认为您需要做的是将该代码包装在FutureTask中并超时,让主线程等待超时或完成任务。
您还可以使用一些其他系统属性,仅在测试模式下抛出exception
看看这篇文章 (免责声明,我写了)
希望能帮助到你
为什么不暂时修改代码以便生成exception? ( throw new IOException(...)
)。 或者,断开与互联网的连接并尝试运行它。
如果您正在等待(阻止)线程,则无法对其进行多少操作。 你必须interrupt()
等待的线程。 JVM似乎有这个选项 ,你只需要在调试器中找到它。
JDB有一个kill
thread命令,开发人员可以在其中指定线程id和用于终止线程的exception 。
我找到了两个使用命令行jdb调试器的引用。 请参阅StackOverflow – 是否可以从同一JVM上运行的其他Java程序查看/暂停/终止特定线程? , 我如何在JDB中使用kill调用?
我在Eclipse Java调试器中找不到类似方法的任何信息。