如何去优先级化的Java的TestRunner在Eclipse中的断点?(How to deprio

2019-08-18 02:32发布

如果我调试在Eclipse中一些多线程Java代码 - 带有主类的runTest,以及一类有趣的QueueListener。

假设:

  • 当的runTest初始化 - QueueListener在后台运行。
  • 当最终确定的runTest - QueueListener被终止
  • 存在的runTest一个方法 - 在它断点
  • 有一个在QueueListener一个方法,在它断点
  • QueueListener可以再次遍地跑
  • 唯一的runTest每执行一次运行(父类)

当在Eclipse中调试 - 这两个断点上来。 但是Eclipse为主的runTest - 我有选择的调试器线程手动将其翻转到QueueListener - 并保持一遍又一遍地重复这一点。

有没有一种方法来告诉Eclipse那我更感兴趣的QueueListener,并考虑TestRunner的是一个低优先级 - 当它选择调试断点显示?

Answer 1:

答案可以在内蚀源代码中找到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;
}

所以,答案是否定的,那边的顺序,将严格在每个线程遇到断点,并添加到底层队列的顺序无法控制。



Answer 2:

没有参与优先级,但是这只是取决于你的应用程序的时间行为。 可能是你的2个断点打的时间很短的量,但总是以相同的顺序。 然后Eclipse会经常打开编辑器(和滚动到线程)只是其中之一(其中我不知道到底选择的策略,但我猜想,发生在第一个断点)。

你真的不希望有你的编辑器/视图改变调试时多线程应用程序,打断点每隔几秒钟,或者你所有的时间?



文章来源: How to deprioritize Java testrunner in Eclipse breakpoints?