小编典典

Eclipse 调试器总是阻塞在 ThreadPoolExecutor 上,没有任何明显的异常,为什么?

all

我在 Eclipse 上处理我的常用项目,它是一个 J2EE 应用程序,由 Spring、Hibernate 等制成。我为此使用了 Tomcat
7(没有特别的原因,我没有利用任何新功能,我只是想尝试一下)。每次我调试我的应用程序时,Eclipse
调试器都会像到达断点一样弹出,但事实并非如此,实际上它停在一个 Java 源文件上,即ThreadPoolExecutor.
控制台上没有堆栈跟踪,它只是停止。然后,如果我单击恢复它会继续,并且该应用程序可以完美运行。这是调试器窗口中显示的内容:

Daemon Thread ["http-bio-8080"-exec-2] (Suspended (exception RuntimeException)) 
    ThreadPoolExecutor$Worker.run() line: 912   
    TaskThread(Thread).run() line: 619

我真的无法解释这一点,因为我根本没有使用ThreadPoolExecutor。必须来自 Tomcat、Hibernate 或
Spring。这很烦人,因为我总是在调试期间必须恢复。

有什么线索吗?


阅读 59

收藏
2022-06-25

共1个答案

小编典典

发布的堆栈跟踪表明在守护线程中遇到了 RuntimeException。这通常在运行时未被捕获,除非原始开发人员捕获并处理了异常。

通常,Eclipse 中的调试器配置为在所有未捕获
的异常上暂停在引发异常的位置执行。请注意,异常可能会在稍后处理,在堆栈帧中较低,并且可能不会导致线程被终止。这将是观察到的行为的原因。

配置 Eclipse 的行为 很简单:
转到 Window > Preferences > Java > Debug 并取消选中 Suspend
execution on uncaught exceptions

2022-06-25