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

2022-08-31 06:05:53

我正在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

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

有什么线索吗?


答案 1

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

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

配置 Eclipse 的行为非常简单:
转到 Windows >首选项> Java >调试“,然后取消选中”在未捕获的异常时暂停执行”。


答案 2

有一个更具体的解决方案,可以防止 Eclipse 在仅从给定类抛出的 s 上中断。RuntimeException

  1. 从“调试”透视图添加新的异常断点
  2. 转到其属性
  3. 转到筛选
  4. 在“限制到所选位置”中,单击“添加类”"
  5. java.util.concurrent.ThreadPoolExecutor
  6. 取消选中该复选框,这意味着这些将被忽略