Подтвердить что ты не робот

Как создать граф вызовов Java

Я бы хотел проанализировать и понять какое-то приложение Java, и я думаю, что график вызовов будет очень полезен. Как его создать? Я использую Eclipse.

4b9b3361

Ответ 1

Получение вызова

1) Если вы можете отлаживать приложение, просто поставьте точку останова (дважды щелкните по левому краю кода) и подождите, пока он остановится. Перейдите в Debug Perspective, если вас там нет, и откройте View/Panel стека вызовов. Он имеет стек вызовов:)

2) Если вы хотите напечатать эту трассировку стека, используйте Exception:

Exception aux = new Exception("I'm here"); // not for throwing!
aux.printStackTrace(); // if you want it in stdout

или

Exception aux = new Exception("I'm here"); // not for throwing!
StringWriter sw = new StringWriter();
aux.printStackTrace(new PrintWriter(sw));
String result = sw.toString(); // if you want it in a string

Получение ссылок на методы

Вы можете получить все ссылки на метод, щелкнув правой кнопкой мыши, "Ссылки", "Рабочая область". Он будет искать все призывы в ваших текущих открытых проектах. Очень полезно.

Профилирование приложения

(спасибо тем, кто ответил на опцию профилирования)

Eclipse TPTP обеспечивает профилирование:

http://www.eclipse.org/tptp/home/project_info/general/whatisTPTP.php

Ответ 2

У меня была точно такая же проблема, поэтому я написал набор инструментов java-callgraph. Используя его, вы можете создавать как динамические (runtime) графики вызовов, так и статические графики вызовов при условии, что у вас есть файлы jar программы и его зависимостей.

Ответ 3

Профилировщик Netbeans очень хорош для этого!!

Функции профилирования включают в себя CPU, память и профилирование резьбы как основной мониторинг JVM...

Вы также можете использовать команду jconsole (часть jdk)

Он запускает графический консольный инструмент который позволяет вам контролировать и управлять Приложения Java и виртуальные машины на локальной или удаленной машине.

Ответ 4

Используя Eclipse Profiler, вы получите то, что хотите.

Ответ 5

Быстро и грязно, создайте новое исключение и распечатайте stacktrace.

Exception e = new Exception();
e.printStackTrace();

Ответ 6

Вы не можете получить график для всего кода в eclipse. Однако вы можете получить древовидный вид вызывающих или вызываемых вызовов для метода.

В исходном коде щелкните правой кнопкой мыши по имени интересующего метода, скажем main (String [] args), затем нажмите "Иерархия открытых вызовов". (Ctrl + Alt + H в Windows)

Это откроет древовидное представление иерархии вызывающих абонентов (Иерархия абонентов). Существует возможность просмотра иерархии Callee.

Чтобы скопировать в текстовый файл щелкните правой кнопкой мыши на node в представлении Иерархия вызовов и нажмите "Копировать расширенную иерархию".

Недостатки:

  • расширение всех узлов дерева должно выполняться вручную (Shift + кратковременно нажмите стрелку в правой части окна)
  • Если нет очевидной начальной точки для кода, вам нужно будет сделать это для каждого метода

Ответ 7

Я иногда использую профайлер Eclipse.

Ответ 8

Thread.dumpStack() позволяет вывести текущий стек вызовов без исключения исключения или использования отладчика. Это будет выводиться на консоль.

Вы можете поместить вызов dumpStack() в "горячих точках" вашего кода, чтобы получить стек вызовов, к которому приложение пришло, чтобы добраться до этой точки.