如果我在Eclipse中调试一些多线程Java代码 - 使用主类RunTest和一个有趣的类QueueListener。
假设:
在Eclipse中调试时 - 两个断点都会出现。但是Eclipse优先考虑RunTest - 我必须通过在调试器中选择该线程来手动将其翻转到QueueListener - 并反复重复这一过程。
有没有办法告诉Eclipse我对QueueListener更感兴趣,并认为testrunner是一个较低的优先级 - 当它选择显示调试断点时?
答案 0 :(得分:3)
答案可以在ThreadEventHandler
方法中的eclipse源代码中找到。有一个挂起线程的队列,如下所示:
/**
* 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;
}
所以答案是否定的,没有对顺序的控制,它将严格按照每个线程命中断点并添加到底层队列的顺序。
答案 1 :(得分:0)
没有涉及优先级,但这仅取决于应用程序的计时行为。可能你的2个断点在很短的时间内被击中,但总是以相同的顺序。然后eclipse将始终打开只有其中一个的编辑器(并滚动到线程)(我不知道所选择的策略,但我会猜测发生的第一个断点)。
在调试多线程应用程序并每隔几秒钟点击一次断点时,你真的不想让你的编辑器/视图一直在变化,或者你呢?