Как создать простой статический граф вызовов в Java? - PullRequest
2 голосов
/ 15 февраля 2012

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

Так, например, если в коде я могу перейти от метода X к методу Y в ряде вызовов метода, то я бы хотел сгенерировать граф вызовов, который показывает поток от метода X к методу Y.

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

Большое спасибо за вашу помощь

Ответы [ 4 ]

3 голосов
/ 18 февраля 2012

Я изучал, какие библиотеки статического анализа доступны для Java в последнее время. Вот некоторые из них, с которыми я сталкивался:

  • Chord : кажется надежной структурой, которая все еще поддерживается / обновляется. Вот ссылка на некоторые документы по их предопределенному анализу (включая материал графика вызовов).
  • DepFinder : этот инструмент используется для генерации графа зависимостей из проекта, я думаю, вы могли бы извлечь из него информацию статического графа вызовов.
3 голосов
/ 06 июня 2012

Это настолько хороший API, насколько я видел:

https://github.com/gousiosg/java-callgraph

0 голосов
/ 17 июня 2012

JTracer - это инструмент для понимания потока выполнения Java-программ путем генерации и визуализации графиков вызовов.Различные события, такие как вход и выход метода, регистрируются и визуализируются.Модификация кода не требуется.

0 голосов
/ 15 февраля 2012

Вы можете в Y сгенерировать исключение, перехваченное в X, а затем проанализировать трассировку стека исключений

// in X: 
try {
   do your calls ...
} catch (Exception e )  {
     StackTraceElement[] elements =  e.getStackTrace();
     for (StackTraceElement e : elements ) {
       // ... evaluate / print ...
       System.out.println(e);
     }
}
...