Есть ли инструмент для перечисления глобальных переменных, используемых и выводимых функцией C?

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

void myfn(void) {
  out1 = in + 1;
  out2 = 2;
}

...инструмент отобразит входы как «вход», а выходы как «выход1» и «выход2».

Кто-нибудь знает о таком инструменте?


person Community    schedule 25.02.2010    source источник


Ответы (4)


Понимание C/C++ (http://www.scitools.com/products/understand/)

person Patrick    schedule 25.02.2010

Наш набор инструментов для реинжиниринга программного обеспечения DMS – это настраиваемый инструмент для анализа программ с производственным качеством Внешний интерфейс C.

Он анализирует C, строит AST и таблицы символов, обеспечивает управление и анализ потока данных, строит глобальные графы вызовов и имеет точки для анализа. Его можно настроить для извлечения этой информации; на самом деле, мы поставили специализированный инструмент на основе DMS крупному производителю автомобилей, чтобы создать инструмент для извлечения почти такой же информации.

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

person Ira Baxter    schedule 25.02.2010
comment
@SanjitKumarMishra: DMS, используемый с таким C, может действовать как инструмент статического анализа; он может сказать вам для каждой функции, к каким глобальным переменным она может (может быть условно) обращаться. Чтобы определить, требуется ли доступ к конкретной глобальной переменной, иногда можно определить статически, например, когда доступ не является условным. DMS (как и любой другой инструмент статического анализа), как правило, не может сказать вам, осуществляется ли доступ к конкретному глобальному объекту при каком-либо произвольном условии. Чтобы сообщить вам, осуществляется ли условный доступ к глобальному объекту во время выполнения, вам необходимо настроить код для отслеживания этого доступа. ... - person Ira Baxter; 14.01.2017
comment
... Наш статический анализ не выполняет инструментирование, но DMS - это механизм преобразования программ общего назначения, и его можно настроить для инструментирования кода для отслеживания таких обращений. Мы уже используем DMS для динамического инструментария кода для сбора (похожих по концепции) данных о покрытии тестами. - person Ira Baxter; 14.01.2017
comment
(Спасибо Санжитса, кажется, происходит до моих поясняющих комментариев, потому что я скопировал и отредактировал эти комментарии, чтобы исправить ужасную опечатку (можно или нельзя), и удалил оригиналы. Жаль, что SO не позволяет вам редактировать свои комментарии. - person Ira Baxter; 14.01.2017

Вы также можете попробовать CppDepend, аналог NDepend для C\C++

person mike    schedule 15.02.2011

Clang по крайней мере может это сделать, но это может быть не самый простой способ. Вам нужно будет взаимодействовать с C++ API.

person Tronic    schedule 25.02.2010