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

Статический анализ графика вызовов Java

Что я хотел бы сделать, это сканировать набор классов Java и трассировать все вызовы методов из определенного метода абстрактного класса, и в этом контексте построить список всего кода, который выполняет некоторую операцию (в этом case, экземпляр экземпляра определенного класса). Я хочу знать, номер строки и аргументы.

Я начал смотреть на BCEL, но у него нет встроенной трассировки графика вызовов? Я не решаюсь писать свои собственные, потому что получение перегрузок, подписи типов и полиморфной отправки прав может быть сложным.

Я ожидал, что появится код инструмента или примера, но я еще ничего не нашел. Мне действительно кажется, что я собираюсь изобрести колесо. Но если я это сделаю, это будет колесо с открытым исходным кодом и доступно на GitHub; -)

PS: Вы найдете существующий вопрос "Генерировать график Java-вызовов", потому что он звучит одинаково, но это совсем не то, что мне нужно.

4b9b3361

Ответ 1

Вы можете попробовать JavaDepend, он предоставляет множество функций, необходимых для зависимостей и показателей, он также предоставляет CQL, как SQL, для запроса вашей базы кода.

Ответ 2

Вы можете использовать набор инструментов java-callgraph для создания достаточно точных статических и динамических call-графов для Java.

Ответ 3

Вы можете использовать Doxygen с помощью Graphviz. Его легко установить и использовать.

Ответ 4

Сажа должна позволить вам легко достичь того, что вы ищете: http://www.sable.mcgill.ca/soot/

Он может автоматически создавать точные графики вызовов.

Здесь вы можете найти всю необходимую документацию: http://www.sable.mcgill.ca/soot/tutorial/index.html

Также есть активный список рассылки для Сата.

Ответ 5

Похоже, вы хотите что-то, что обеспечивает доступ к абстрактному синтаксису и полной таблице символов. Затем пользовательское сканирование АСТ функций в графе вызовов, внедренных в каждый метод реализации (как обозначено таблицами символов) абстрактного метода, дает вам возможность найти новую операцию, тип которой представляет собой определенный класс интересов.

DMS Software Reengineering Toolkit - это обобщенная технология компилятора, обеспечивающая основные сервисы разбора, построения/навигации AST, построения/навигации таблиц символов, управления потоком, поток данных и построение графика вызовов. DMS имеет необязательный Java Front End, который предоставляет полный парсер Java, строит Java AST и таблицы символов и может построить граф вызовов. Интерфейс Java Front End также может читать файлы .class; вам было неясно, хотите ли вы влезть в файлы классов, тоже охотясь за информацией.

Ответ, который вы хотите, не находится на полке. Вам нужно создать собственный код для реализации идей в первом абзаце, но DMS может обеспечить большую часть исходного материала. Он не содержит много деталей из файлов .class(они используются в основном для разрешения типов в исходном коде).