Я хочу создать callgraph для java-проектов из командной строки. Я изучил несколько проектов, каждый раз не поддающийся (как в моем понимании, так и в функциональности) того, к чему я стремлюсь. Некоторые простые рекомендации о том, как это сделать, были бы замечательными, дополнительная цель - получить текстовое представление этого графика.
Вот что я пробовал:
Call-graph: https://github.com/gousiosg/java-callgraph
Это дает мне текстовый вывод, который я хочу, но я не могу найти способ (после просмотра документации в течение некоторого времени), чтобы превратить это в графический вывод визуального (графического файла).
Сажа: http://sable.github.io/soot/
Проведя огромное количество времени, просматривая документацию SOOT, которая кажется довольно сложной, мне удалось заставить SOOT создать байт-код. Тем не менее, я не могу найти никаких руководств о том, как создать граф вызовов из него. Я только вижу на главной странице, что он может это сделать, и я получаю несколько сообщений по электронной почте из моих поисковых запросов Google, все, что является просто вопросами без ответов. Я использую ночную сборку с командой:
java -cp soot-trunk.jar soot.Main -cp . -pp HelloWorld
Где HelloWorld - это имя моего java файла, я получаю вывод, который является файлом .class, но я не вижу, как получить фактический график вызовов. Ниже приведено руководство: https://github.com/Sable/soot/wiki/Running-Soot. Когда я следую ссылкам о визуализации, они, похоже, являются неработающими ссылками, которые затем перенаправляются на главную страницу. Я могу увидеть некоторую информацию об использовании флага -cg на странице командной строки, но не могу заставить ничего работать - я просто получаю ошибку синтаксического анализа, предлагая недопустимый аргумент: https://ssebuild.cased.de/nightly/soot/doc/soot_options.htm#phase_5
Поиск stackoverflow - существующие ответы Я уже рассмотрел несколько похожих вопросов, таких как: Статический анализ графика вызовов Java Тем не менее, ответы просто говорят "использовать сажу" или "использовать call-graph", я пробовал их без везения - хотя я ближе всего к графу вызовов, так как у меня есть текстовый вывод.
Я вижу некоторые плагины на основе графического интерфейса и плагины eclipse, которые утверждают, что создают диаграммы вызовов, но я пытаюсь заставить это работать из командной строки.
Любая помощь действительно оценена, руководство или набор команд с помощью call-graph или Soot, или другая программа действительно поможет. Возможно, стоит также передать какой-либо короткий учебник им для их документации, поскольку, кажется, задавайте больше вопросов, чем ответов при поиске.
Для справки, в настоящее время я пытаюсь выполнить очень простой класс:
public class HelloWorld {
public static void main(String[] args) {
foo();
}
public static void foo(){
System.out.println("Hello World");
}
}