Список неиспользуемых символов - PullRequest
4 голосов
/ 15 декабря 2010

Я хочу удалить мертвый код из большого проекта и хотел бы начать с неиспользуемых символов. Есть ли способ заставить компоновщик перечислить неиспользуемые символы, которые он оптимизировал? Я использую компоновщик GNU (LD) вместе с GCC.

В противном случае любой из Binutils (readelf или objdump) может выполнять ту же функцию?

Ответы [ 2 ]

6 голосов
/ 15 декабря 2010

Большинство компиляторов / компоновщиков оптимизируют использование неиспользуемых символов. Если вы работаете в системе * nix, вы можете попробовать использовать команду «nm» для всех объектных файлов, отфильтровать ее и отсортировать, чтобы получить список всех экспортируемых функций, определенных этими объектными файлами.

nm *.o | grep "^[0-9a-f]* T " | sed 's/^[0-9a-f]* T //' | sort -u > symbols_in.txt

Я полагаю, что вы можете сделать то же самое в последних двоичных файлах.

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

Обратите внимание, что некоторые функции могут использоваться кодом, который исключен в результате условной компиляции. Например. переключатель #ifdef, чтобы сказать, что на платформе A используйте такую-то встроенную функциональность, а на другой платформе - свою собственную версию функции, потому что нет встроенной или стандартной библиотеки, или она не работает должным образом.

4 голосов
/ 15 декабря 2010

GCC может генерировать предупреждение компилятора, когда он встречает функции, метки и параметры функции, которые не используются. Флаги компилятора -Wunused -Wunused-parameter сделают это.

Я лично рекомендую включать все предупреждения и дополнительные предупреждения при разработке. Флаги -Wall -Wextra, и эти флаги подразумевают предупреждения о мертвом коде вместе с целым рядом других предупреждений, которые я считаю полезными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...