Генератор управляющих графов для кода на C++

Я ищу генератор Control Flow Graph для исходного кода, написанного на C++. Вы знаете какой-нибудь статический генератор с открытым исходным кодом?

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

Я уже написал весь движок для регистрации выполненных строк.

Спасибо за все ответы.


person Luke nullptr Krupa    schedule 12.11.2016    source источник
comment
Подобные вопросы здесь явно не по теме. Прочтите пункт № 4 из этой статьи справочного центра.   -  person πάντα ῥεῖ    schedule 12.11.2016
comment
Запрашивать рекомендации по программному обеспечению не по теме stackoverflow, но вы, вероятно, можете задать свой вопрос на рекомендациях по программному обеспечению.   -  person nwp    schedule 12.11.2016
comment
Не с открытым исходным кодом, но см. stackoverflow.com/a/41497191/120163   -  person Ira Baxter    schedule 09.01.2017


Ответы (2)


Вы можете использовать clang или llvm.

Сначала скомпилируйте вашу программу в llvm ir

clang++ -emit-llvm -S prog.cpp -o prog.ll

Затем используйте opt для создания графа потока управления.

opt --dot-cfg prog.ll

Это выводит точечный файл, который можно просмотреть с помощью графвиз. На Mac вы можете сделать brew install graphviz и запустить следующее, чтобы сгенерировать png.

dot -Tpng cfg.main.dot -o main.png

У вас должен быть один точечный файл для каждой функции в вашей программе, поэтому может быть проще написать скрипт для автоматического преобразования их всех в png.

person Community    schedule 22.03.2018

CoFlo — это бесплатный инструмент анализа исходного кода с открытым исходным кодом, который генерирует и анализирует графы потока управления из исходного кода C и C++.

person Capsane    schedule 08.09.2017