调试时强制异常

时间:2011-03-05 17:17:45

标签: java debugging exception netbeans

调试 时是否可以强制抛出

让我举个例子:我正在调试一些从互联网上下载页面的代码。当Internet连接丢失或网卡关闭时,应抛出IOException,而不是执行阻塞(在第二行)

URLConnection connection = requestURL.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

我需要一种方法在代码阻塞时强制抛出异常 ,同时调试 ,这样我就可以跳转到catch块了。

我正在使用netbeans BTW。

正在调试 =在执行线程暂停时手动添加。

编辑:换句话说,我需要注入 - 在运行时调用异常,而不会影响当前代码!

谢谢。

6 个答案:

答案 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调试器中类似方法的任何信息。