eclipse debug 断点停在ThreadPoolExecutor类的processWorkerExit(w, completedAbruptly)

1、问题描述

            在eclipse或者集成eclipse的其他开发工具中,在tomcat中部署了项目debug模式启动项目,
      项目启动之后修改项目java源代码,eclipse会自动部署项目到tomcat中。
      但在tomcat自动重启时会自动停止到processWorkerExit(w, completedAbruptly);这一行代码上。
      
      
2、问题出现原因
   
            原因是因为在 java.util.concurrent.ThreadPoolExecutor类中的 runWorker(Worker w)方法上有未捕获的异常信息,源代码如下:
            可见在try之后并没有catch语句。而在eclipse的java debug模式中就有“遇到未捕获异常停止执行”的选项。只要不勾选该项就可以解决该问题了。
            final void runWorker(Worker w) {
        Runnable task = w.firstTask;
        w.firstTask = null;
        boolean completedAbruptly = true;
        try {
            while (task != null || (task = getTask()) != null) {
                w.lock();
                clearInterruptsForTaskRun();
                try {
                    beforeExecute(w.thread, task);
                    Throwable thrown = null;
                    try {
                        task.run();
                    } catch (RuntimeException x) {
                        thrown = x; throw x;
                    } catch (Error x) {
                        thrown = x; throw x;
                    } catch (Throwable x) {
                        thrown = x; throw new Error(x);
                    } finally {
                        afterExecute(task, thrown);
                    }
                } finally {
                    task = null;
                    w.completedTasks++;
                    w.unlock();
                }
            }
            completedAbruptly = false;
        } finally {
            processWorkerExit(w, completedAbruptly);
        }
    }
 3、解决方案

           去掉java->debug->suspend execution on uncaught exceptions 选项钱的对勾就行了。如下图所示:

猜你喜欢

转载自qmaker.iteye.com/blog/2241273