Я хочу составить список глобальных переменных/макросов, использованных функцией и выводом функцией. Например, для:
void myfn(void) {
out1 = in + 1;
out2 = 2;
}
.. инструмент перечислил бы исходные данные как 'в' и выводы как 'out1' и 'out2'.
Кто-либо знает о таком инструменте?
Понимание C / C ++ ( http://www.scitools.com/products/understand/ )
{{ 1}}Наш DMS Software Reengineering Toolkit - это настраиваемый инструмент анализа программ с производственным качеством C Front End.
Он анализирует язык C, строит AST и таблицы символов, обеспечивает анализ потоков управления и данных, строит графы глобальных вызовов и имеет точки анализа. Он может быть настроен для извлечения этой информации; на самом деле, мы поставили инструмент на базе DMS крупному производителю автомобилей для создания инструмента для извлечения почти точно такой информации.
Если вы придерживаетесь только информации таблицы символов, вы можете извлечь "прямое чтение или запись", как в вашем примере. Если использовать информацию графа вызовов, можно обнаружить чтения или записи в глобальные файлы, вызванные вызовами других функций. Если вы используете анализ по точкам, вы можете обнаружить (консервативно) чтения или записи в глобальные переменные через перенаправление.
Clang по крайней мере может это сделать, но это может быть не самый простой способ. Вам нужно будет взаимодействовать с C ++ API.