Инструмент для списка абонентов функции в C? - PullRequest
3 голосов
/ 10 ноября 2011

Справочная информация:
В конкретном проекте имеется около пары тысяч функций в более чем сотне файлов.Функции разделены, чтобы находиться в двух банках памяти кода - fast_mem и slow_mem.Но теперь, поскольку область fast_mem ограничена, в ней не хватает места для размещения любых новых изменений кода.

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

Вопрос:
Итак, что касается вопроса, есть ли инструмент, который может перечислять вызывающихвсе функции в проекте?С этим я могу пойти дальше и удалить функции в fast_mem, которые не имеют никаких вызывающих.

Я использую cscope для просмотра кода вместе с ctags.Но для этого необходимо ввести имя функции вручную.Можно ли это как-то автоматизировать, как получить полный список?
Я также попробовал Doxygen с его функцией графика звонящих.Результат не так удобен для использования.

Ответы [ 4 ]

0 голосов
/ 10 ноября 2011

Вы можете использовать инструмент статического анализа кода, например cppcheck . Если вы вызываете его с параметром --enable=unusedFunction, он предупредит о неиспользуемой функции.

0 голосов
/ 10 ноября 2011

Если ваш компилятор является недавним GCC (или если вы можете переключиться на GCC 4.6, возможно, в качестве кросс-компилятора), вы можете разработать плагин GCC или расширение MELT , чтобы выяснить это.

Конечно, если вы, например, делаете трюки с указателями на функции (например, арифметика непереносимых указателей на указатели на функции), исходный вопрос неразрешим.

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

И, возможно, проект достаточно важен для настройкикомпилятор для лучшего (автоматического или полуавтоматического) компромисса между fast_mem и slow_mem имеет смысл.Обычно это отличный случай для плагинов GCC или расширений MELT (но это занимает несколько рабочих дней или недель, а не часов, потому что вам нужно понимать внутренние представления GCC для настройки GCC), и вы, вероятно, единственный, кто могсделайте это (потому что ваш вопрос очень свойственен некоторым странным системам).

0 голосов
/ 10 ноября 2011

Давайте предположим, что не ведутся игры с указателями на нечетные функции. Тогда вы можете отключить недостаточно используемый cflow:

http://www.gnu.org/software/cflow/

Создать «обратный индекс» с флагом -r. вы получите список каждой функции, а затем место ее вызова. Вы можете кормить его несколькими файлами.

0 голосов
/ 10 ноября 2011

Я использую Scientific Toolworks Понимаю

...