如果我调试在Eclipse中一些多线程Java代码 - 带有主类的runTest,以及一类有趣的QueueListener。
假设:
- 当的runTest初始化 - QueueListener在后台运行。
- 当最终确定的runTest - QueueListener被终止
- 存在的runTest一个方法 - 在它断点
- 有一个在QueueListener一个方法,在它断点
- QueueListener可以再次遍地跑
- 唯一的runTest每执行一次运行(父类)
当在Eclipse中调试 - 这两个断点上来。 但是Eclipse为主的runTest - 我有选择的调试器线程手动将其翻转到QueueListener - 并保持一遍又一遍地重复这一点。
有没有一种方法来告诉Eclipse那我更感兴趣的QueueListener,并考虑TestRunner的是一个低优先级 - 当它选择调试断点显示?
答案可以在内蚀源代码中找到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会经常打开编辑器(和滚动到线程)只是其中之一(其中我不知道到底选择的策略,但我猜想,发生在第一个断点)。
你真的不希望有你的编辑器/视图改变调试时多线程应用程序,打断点每隔几秒钟,或者你所有的时间?