Использование GCC для поиска недоступных функций ("мертвый код")
Привет, ребята, я искал способ найти статически недоступные функции в (очень) большом C++ проекте. Я пытался использовать doxygen и другие инструменты статического анализа, предложенные здесь, но мне показалось, что проект слишком сложен для них. Наконец, я решил, что использование инструментов GCC (g++, gprof, gcov и т. Д.) - самый безопасный вариант, хотя я не мог понять, как это сделать. Я думаю, что оптимизации g ++ устраняют статически недоступные функции, но я не уверен, как получить имена функций, которые он исключает.
У вас есть какие-нибудь предложения?
Спасибо!
2 ответа
Оптимизация мертвого кода обычно выполняется компоновщиком - у компилятора нет обзора. Тем не менее, компилятор мог бы устранить неиспользованные static
функции (так как они имеют внутреннюю связь).
Поэтому вы должны смотреть не на параметры GCC, а на параметры ld. Кажется ты хочешь --print-gc-sections
, Тем не менее, обратите внимание, что вы, вероятно, хотите, чтобы GCC поместил каждую функцию в отдельный раздел, -ffunction-sections
, По умолчанию GCC помещает все функции в один и тот же раздел, а ld недостаточно умен, чтобы исключить неиспользуемые функции - он может только удалять неиспользуемые разделы.
gcov - это то, что вы ищете. У вас есть то, что указано в вопросе, вы не смотрели на это?