Инструмент Scientific Toolworks "Понимаю" * Инструмент 1002 * должен иметь возможность создавать графики вызовов для C и C ++.
Doxygen также предположительно создает графы вызовов.
У меня нет опыта ни с одним из них, но есть некоторые суровые мнения. Вы должны иметь в виду, что я являюсь продавцом другого инструмента, поэтому примите это мнение с большой долей соли.
У меня есть опыт построения достаточно точных графиков вызовов для массивных систем C (25 миллионов строк) с 250000 функций.
Одна проблема, с которой я сталкиваюсь при построении реалистичного графа вызовов, - это косвенные вызовы функций, а для C ++ - перегруженные вызовы функций методов. В больших системах их много. Чтобы определить, что вызывается при вызове FOO, вашему инструменту необходимо глубоко семантическое понимание того, как компилятор / язык разрешает перегруженный вызов, и для косвенных вызовов функций - достаточно точное определение того, на что может указывать указатель функции. в большой системе. Если вы не понимаете это правильно, ваш график вызовов будет содержать много ложных срабатываний (например, фиктивные утверждения о вызовах А из-за А), а ложные срабатывания в масштабе - это катастрофа.
Для C ++ у вас должно быть то, что составляет полный интерфейс компилятора. Ни в Understand, ни в Doxygen этого нет, поэтому я не понимаю, как они на самом деле могут понять правила C ++ по перегрузке / поиску Кенига. Ни Understand, ни Doxygen не предпринимают никаких попыток рассуждать о косвенных вызовах функций.
Наш инструментарий реинжиниринга программного обеспечения DMS достаточно хорошо строит графики вызовов для C, даже с косвенными указателями на функции, используя точный внешний интерфейс на языке C .
У нас есть точный интерфейс на языке C ++ , и он правильно решает проблему перегрузки (в той мере, в какой с этим согласен комитет C ++, и мы понимаем, что они сказали и что делают отдельные компиляторы [они не всегда согласны]), и у нас есть что-то вроде Doxygen, которое показывает эту информацию. В настоящее время у нас нет анализа указателей на функции для C ++, но мы работаем над этим (у нас есть потоковые графы полного управления в методах, и это большой шаг).
Я понимаю, CLANG имеет некоторую опцию для вычисления графиков вызовов, и я ожидаю, что она будет точной при перегрузках, поскольку Clang по сути является компилятором C ++, реализованным с помощью набора компонентов. Я не знаю, что, если что-то делает Кланг, чтобы анализировать указатели функций.