Вызов иерархии Thread.run() в Eclipse

Я часто использую функцию eclipse «Иерархия открытых вызовов», чтобы отслеживать, куда идут вызовы методов в более крупных проектах Java. Меня раздражают потоки, поскольку иерархия вызовов показывает вызывающих метод Thread.run() как различные внутренние функции обработки потоков Java, а не вызов Thread.start(), который фактически приводил к запуску потока.

Есть ли способ заставить Eclipse показывать вызовы Thread.start как родителя методов Thread.run(). Возможно, плагин для этого?


person Community    schedule 22.01.2009    source источник


Ответы (3)


Насколько я понимаю, ваш вопрос: вы хотите найти вызывающую сторону метода Thread.start() для данного метода Runnable.run()?

Я считаю, что это было бы полезно для очень маленьких, краткосрочных анонимных Runnables.

Однако в более общем случае я не уверен в дальнейшей практичности:

  • Стандартная практика заключается в том, что Runnable передается в поток в качестве аргумента конструктора. Часто бывает так, что Runnable вызывается предварительно созданным потоком (например, Executors, asynchExec). В данном случае вас интересуют вызывающие объекты конструктора.
  • Неанонимные Runnables можно будет отследить через их конструктор (хорошим подходом будет иерархия вызовов в этом ctor)
  • Это может сделать переопределение метода Thread.run(), но тогда вас больше интересуют вызывающие объекты метода Thread.start().
  • Представление иерархии вызовов (AFAIK) не очень расширяемое (однако для этого использовались Implementors). , но была написана теми же людьми, что и исходная иерархия вызовов, прежде чем она была интегрирована в ядро ​​JDT).
person jamesh    schedule 23.01.2009

Интересный вопрос.

Вы можете проверить nWire. Это новый инструмент для изучения всех ассоциаций вашего кода в одном динамическом представлении. Очень удобный и простой в использовании. Он объединяет вызывающих и реализаторов (и все другие ассоциации) вместе. Хотелось бы получить ваши отзывы о нем.

person zvikico    schedule 23.01.2009

Спасибо за ответ, Джеймс. С первыми двумя пунктами, которые вы сделали, вы говорите, что (как в анонимных, так и в неанонимных Runnables) было бы полезно посмотреть на иерархию вызовов конструктора Runnable - да, я согласен! Это обычно то, что я в конечном итоге делаю. Но обычно это означает частое переключение между двумя иерархиями, из которых одновременно может отображаться только одна. Я хотел бы избежать этого, сохранив одну иерархию.

Между конструктором Runnable и вызовом run() нет прямой иерархии вызовов, поэтому мне кажется неуместным расширять иерархию вызовов, добавляя конструктор в качестве «вызывающего» run(). Однако вызовы start() или добавления потока в Executor (или, возможно, вызовы run() внутри исполнителя) могут быть уместны для отображения в иерархии вызовов.

Мне действительно было просто интересно, существует ли существующее решение для этого, которое я не смог найти. Думаю, мне просто нужно попробовать плагин самому, если я этого достаточно хочу.

Я попробовал плагин для разработчиков. Это полезно, но не для этой конкретной проблемы!

Я также пробовал nWire. У него есть много функций, которые у меня не было времени полностью изучить, но я не смог найти способ сделать то, что я ищу здесь.

person Community    schedule 28.01.2009