Как создать простой статический граф вызовов в Java?

2

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

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

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

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

  • 0
    Привет, Вам удалось найти решение для этого?
Теги:
code-analysis
soot
call-graph

4 ответа

3

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

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

3

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

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

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

0

Вы можете в 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);
     }
}
  • 2
    я не смогу изменить код в системе, которую собираюсь анализировать. Мне нужно использовать граф вызовов как часть инструмента, который я разрабатываю и который будет использоваться для анализа кода в данном проекте. поэтому код должен быть оставлен как есть
  • 0
    Хотя стратегия ограничена вашим исходным кодом, как вы сказали, любой, кто читает это, должен принять к сведению это предложение. Это лучшее решение, которое я видел до сих пор.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню