Eclipse SWING应用程序:只有在未捕获异常抛出后才会触发断点

6
我遇到了一个非常奇怪的问题。 我正在使用Eclipse开发Java SWING应用程序。我在代码中设置了断点,然后运行调试。我执行包含断点的代码,但它总是被跳过了。 只要我运行一些抛出未捕获异常的代码,断点就开始再次被命中,而没有改变任何其他东西。抛出异常的代码和包含断点的代码之间没有关系。
我尝试在几个地方设置断点,但直到抛出异常之前它们都不会被命中。 我只在这个特定的应用程序中遇到了这个问题。我的调试器对其他SWING应用程序正常工作。
你能想到任何可能引起这个问题的原因吗?

要下载Java6u13(当前版本14之前的先前版本),您可以访问:http://java.sun.com/products/archive/j2se/6u13/index.html - VonC
2个回答

7

你正在使用的Eclipse和Java版本是什么?

你是否知道这个问题?(bug 279137: 在JDK 1.6.0_14下断点无法命中)


正如gojomo在评论中提到的那样,这个Bug(279137)现在(2009年7月21日)已经被提出:

Bug现在可以在Sun Bug数据库中看到:bug 6862295

我们列出了一个解决这个问题的方法,在我们调查该Bug的修复方法时可以使用该方法。

解决方法

使用选项-XX:+UseParallelGC 可以使客户端VM或服务器VM中无法重现故障。

(添加到eclipse.ini选项中)

我建议您使用“关注此错误”功能,以便在错误有更新时接收通知。这是关注此具体错误的链接。

已修复

正如JDK6_u16版本说明(2009年8月底)所提到的,该bug已经被修复。

此版本中已修复的错误:

6862295 调试会话期间JDWP线程ID更改(导致断点被忽略)


我经常遇到这个问题。感谢您提供的漏洞报告链接。 - akarnokd
我认为这可能是原因。我尝试下载1.6.0_13,但无论如何都找不到它。有人有链接吗? - AndreaC
@AndreAC 很高兴听到这个消息。我希望java6u15可以解决这个问题。不要忘记,你可以使用java6u14启动你的eclipse(获得最新的Hotspot优化和更快的eclipse),但在eclipse中声明jdk6u13为默认JRE(用于编译和运行你的程序)。 - VonC
1
该错误现在提到了6u14的另一个解决方法:使用JVM选项:-XX:+UseParallelGC。 - gojomo
@spdenne:谢谢您的提醒(我知道这个发布,只是忘记了这个答案!)。此帖现已更新。 - VonC
显示剩余2条评论

0
你是否在单独的线程中启动了GUI?我不认识你的具体问题,但是许多奇怪的问题一旦我开始使用Java教程中的这段代码就消失了:
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        createAndShowGUI();
    }
});

啊啊啊...好久不见的invokelater。我还记得以前每当我遇到Swing问题时,都会迷信地使用它。我甚至曾经嵌套调用过它。 - Epaga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接