调试 时是否可以强制抛出 。
让我举个例子:我正在调试一些从互联网上下载页面的代码。当Internet连接丢失或网卡关闭时,应抛出IOException,而不是执行阻塞(在第二行)
URLConnection connection = requestURL.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
我需要一种方法在代码阻塞时强制抛出异常 ,同时调试 ,这样我就可以跳转到catch块了。
我正在使用netbeans BTW。
正在调试 =在执行线程暂停时手动添加。
编辑:换句话说,我需要注入 - 在运行时调用异常,而不会影响当前代码!
谢谢。
答案 0 :(得分:21)
我会找到正在等待的变量,并在eclipse的表达式窗口中,对该变量调用notify,然后我将null
输出该变量,以便synchronized块会抛出{{ 1}}。
答案 1 :(得分:14)
在eclipse Debug透视图中,在Expressions视图中,只需添加新表达式:throw new Exception("test")
。我认为NetBeans有类似的东西。
答案 2 :(得分:2)
我认为您需要做的是将该代码包装在FutureTask中并超时,让主线程等待超时或完成任务。
如果处于测试模式
,您还可以使用其他一些系统属性来仅抛出异常看看this post(免责声明,我写了)
希望有所帮助
答案 3 :(得分:0)
为什么不暂时修改代码以便生成异常? (throw new IOException(...)
)。或者,断开与互联网的连接并尝试运行它。
答案 4 :(得分:0)
如果您正在等待(阻止)线程,则无法对其进行太多操作。你必须interrupt()
等待线程。 JVM似乎有this option,您只需在调试器中找到它。
答案 5 :(得分:0)
JDB有一个kill
线程命令,开发人员可以在其中指定用于终止线程的线程ID和异常。
我找到了两个使用命令行jdb调试器的引用。请参阅StackOverflow - Is it possible view/pause/kill a particular thread from a different java program running on the same JVM?,How do I use kill call in JDB?
我找不到Eclipse Java调试器中类似方法的任何信息。