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

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

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

.. инструмент перечислит входные данные как «in», а выходные данные как «out1» и «out2».

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

Ответы [ 4 ]

3 голосов
/ 25 февраля 2010

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

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

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

3 голосов
/ 25 февраля 2010

Понять для C / C ++ (http://www.scitools.com/products/understand/)

2 голосов
/ 15 февраля 2011

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

1 голос
/ 25 февраля 2010

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

...