Многопоточная иерархия вызовов на основе времени - PullRequest
3 голосов
/ 27 марта 2012

Я использую Eclipse для написания кода Java.Если я отлаживаю некоторый код, я могу установить точку останова и следить за тем, как код проходит через каждую из функций, или я могу вернуться назад.Я также могу посмотреть на иерархию вызовов или ссылки, чтобы получить представление.Но этого недостаточно.

Я хотел бы получить некоторую временную визуализацию того, что каждый поток делает во время процесса из ... скажем, «точки А» (нажатие кнопки на интерфейсе) в «точку Б» (получение результата).Я хочу увидеть, какие классы / методы были вызваны в каком порядке.Я хочу хороший способ визуализировать, какой тип вывода исходит от одного метода и входит в другой метод, который запускает новый процесс ... и т. Д.

Является ли профилировщик единственным доступным для этого типа визуализации?По сути, я хочу создать диаграмму действий или схему.Есть ли какой-нибудь плагин или приложение, которое может генерировать что-то вроде этого?

Редактировать: Вот пример того, о чем я думаю ... по крайней мере, визуально: essmodel.sourceforge.net/index.html У него есть некоторыепоток, где код ведет.Но я думаю, что это просто статическая карта того, какие классы ведут к другим классам и какие параметры ввода / вывода доступны.Я хотел бы отобразить поток на основе конкретного случая.

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

JProfiler предлагает такой вид, он называется "Call tracer":

enter image description here

Важно очень тщательно ограничивать фильтры, чтобы не записывать слишком много данных.

Отказ от ответственности: Моя компания разрабатывает JProfiler.

0 голосов
/ 27 марта 2012

Я считаю, что использование профилировщика будет вашим лучшим вариантом. Вы знакомы с VisualVM? Он поставляется с JDK (ищите "jvisualvm.exe" в каталоге bin вашего JDK) и способен автоматически профилировать как локальные виртуальные машины, так и удаленные машины при правильной настройке. И он дает довольно приятный обзор того, какие потоки работают и код, на который они тратят время, поэтому я думаю, что вы можете легко сделать из этого то, что вам нужно. И, что самое приятное, это бесплатно :) 1001 *

Как я уже сказал, локальное профилирование - это бриз. Вы просто запускаете JVisualVM.exe в автономном режиме, и он автоматически находит все процессы Java, работающие на локальном компьютере (вы можете просто выбрать их из меню, которое VisualVM предлагает вам заранее). Если вы хотите выполнять профилирование удаленно, установите следующие параметры виртуальной машины для всего, что вы используете:

-Dcom.sun.management.jmxremote.port=[0-65535]
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

Затем в VisualVM используйте имя хоста машины, на которой работает удаленная JVM, и порт, который вы настроили в первом аргументе VM, указанном выше.

...