调试intellij中的multiThreads:我怎样才能看到所有抛出的异常?

时间:2016-10-27 13:17:25

标签: java multithreading exception testing intellij-idea

我在java中有一个多线程代码。

我使用intellij进行调试。我知道如何在线程之间切换调试上下文。

然而,控制台只显示主线程抛出的异常。

我怎样才能看到从任何线程抛出的异常?

enter image description here

enter image description here

基本上当我使用Executor运行集成测试时,会从辅助线程抛出一些异常。

但是没有任何内容打印到调试控制台。

实际上代码过得很快,而且从来没有达到我的尝试。

在抛出异常的代码

后,我无法继续下一步
try {
    while (true) {
        logger.debug("New thread. polling on DB, polling on deployment service");

        ConfigAction configAction = configActionFactory.get(ConfigActionsEnum.PushToDeployment);

        while (configAction != null) {
            configAction = configAction.execute() ? configAction.nextActivity() : null;
        }
    }
} catch (Exception e) {
    e.printStackTrace();
    logger.error("DeploymentContextListener run failed", e);
}

当我使用主线程运行相同的代码时,我看到了异常:

public void run() {

    try {
        while (true) {
            logger.debug("New thread. polling on DB, polling on deployment service");

            ConfigAction configAction = configActionFactory.get(ConfigActionsEnum.PushToDeployment);

            while (configAction != null) {
                configAction = configAction.execute() ? configAction.nextActivity() : null;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        logger.error("DeploymentContextListener run failed", e);
    }

它写在我有的一个try-catch中

} catch (Exception ex) {
    logger.error("failed to get from DB: getLatestConfigVersionWaitingForDeploy", ex);
}

1 个答案:

答案 0 :(得分:0)

我的问题是我用过:

 ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(() -> { }

从我读过的内容:

invokeAll - 调用“future.get()”。等待所有线程完成。

提交 - >将错误附加到Future对象,而不是std-error

执行 - >错误被抛到std-error