繁体   English   中英

如何在Eclipse断点中优化Java testrunner?

[英]How to deprioritize Java testrunner in Eclipse breakpoints?

如果我在Eclipse中调试一些多线程Java代码 - 使用主类RunTest和一个有趣的类QueueListener。

假设:

  • 初始化RunTest时 - QueueListener在后台运行。
  • 当RunTest完成时 - QueueListener被终止
  • RunTest中有一个方法 - 其中有一个断点
  • QueueListener中有一个方法,其中包含断点
  • QueueListener可以反复运行
  • RunTest每次执行只运行一次(父类)

在Eclipse中调试时 - 两个断点都会出现。 但Eclipse优先考虑RunTest - 我必须通过在调试器中选择该线程来手动将其翻转到QueueListener - 并反复重复这一过程。

有没有办法告诉Eclipse我对QueueListener更感兴趣,并认为testrunner是一个较低的优先级 - 当它选择显示调试断点时?

答案可以在ThreadEventHandler方法中的eclipse源代码中ThreadEventHandler 有一个挂起线程的队列,如下所示:

/**
 * Queue of suspended threads to choose from when needing
 * to select a thread when another is resumed. Threads
 * are added in the order they suspend.
 */
private Set fThreadQueue = new LinkedHashSet();

再往下,每次遇到断点时,挂起的线程都会被添加到这个队列中:

protected void handleSuspend(DebugEvent event) {
   ...
   queueSuspendedThread(event);
   ...
}

获取下一个挂起线程的方法是:

protected synchronized IThread getNextSuspendedThread() {
    if (!fThreadQueue.isEmpty()) {
        return (IThread) fThreadQueue.iterator().next();
    }
    return null;
}

所以答案是否定的,没有对顺序的控制,它将严格按照每个线程命中断点并添加到底层队列的顺序。

没有涉及优先级,但这仅取决于应用程序的计时行为。 可能你的2个断点在很短的时间内被击中,但总是以相同的顺序。 然后eclipse将始终打开只有其中一个的编辑器(并滚动到线程)(我不知道所选择的策略,但我会猜测发生的第一个断点)。

在调试多线程应用程序并每隔几秒钟点击一次断点时,您真的不希望您的编辑器/视图一直在变化,或者您呢?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM