Как обнаружить неиспользованные методы и #import в Objective C

shared_ptr и weak_ptr, особенно в многопоточном коде, один стоящий установки повышение. BOOST_STATIC_ASSERT также довольно прохладно для того, чтобы сделать проверку логики времени компиляции.

то, что много классов и утилит в повышении находится в заголовках, означая Вас, может получить большую функциональность, не имея необходимость компилировать что-либо вообще, также плюс. Мобильность обычно не является проблемой, если Вы не используете чрезвычайно старый компилятор. Я когда-то пытался заставить MPL работать с VC6, и это распечатало 40 000 ошибок предупреждений / внутренних ошибок прежде, чем взорваться полностью. Но в целом большая часть библиотеки должна работать независимо от Вашей платформы или поставщика компилятора.

Учитывают то, что довольно много вещей от Повышения уже находятся в TR1 и скорее всего будут в следующем пересмотре библиотеки стандарта C++. Это - довольно большое подтверждение.

98
задан Forge 25 January 2017 в 10:15
поделиться

2 ответа

Xcode позволяет вам (отменить) проверку настроек на наличие определенных предупреждений компилятора, которые могут предупредить вас о некоторых типах неиспользуемого кода. (Выберите проект в списке источников и выберите «Файл»> «Получить информацию», затем выберите вкладку «Сборка»). Вот несколько (которые отображаются для меня в Clang и GCC 4.2), которые могут быть интересны:

  • Неиспользуемые функции
  • Неиспользуемые параметры
  • Неиспользуемые значения

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

Неиспользуемые методы Objective-C гораздо труднее обнаружить, чем неиспользуемые функции C, потому что сообщения отправляются динамически. Предупреждение или ошибка могут сказать вам, что у вас есть потенциальная проблема, но ее отсутствие не гарантирует, что у вас не будет ошибок времени выполнения.


Редактировать: Еще один хороший способ обнаружить (потенциально) неиспользуемые методы - это изучить покрытие кода от фактических выполнений. Обычно это делается в тандеме с автоматическим модульным тестированием, но это не обязательно.

Это сообщение в блоге представляет собой достойное введение в модульное тестирование и покрытие кода с помощью Xcode. В разделе gcov (который, кстати, работает только с кодом, сгенерированным GCC) объясняется, как заставить Xcode строить инструментированный код, который может записывать, как часто он выполнялся. Если вы протестируете инструментальную сборку своего приложения в симуляторе, а затем запустите на нем gcov, вы увидите, какой код был выполнен с помощью такого инструмента, как CoverStory (довольно упрощенный графический интерфейс) или lcov (скрипты Perl для создания отчетов в формате HTML).

Я использую gcov и lcov для CHDataStructures.framework и автоматически генерирую отчеты о покрытии после каждой фиксации SVN. Опять же, помните, что неразумно рассматривать выполненное покрытие как окончательную меру того, какой код «мертв», но это, безусловно, может помочь определить методы, которые вы можете исследовать дальше.

Наконец, поскольку вы пытаетесь удалить мертвый код, Думаю, вы также найдете этот вопрос SO интересным:

66
ответ дан 24 November 2019 в 05:17
поделиться

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

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

После запуска вернитесь, а затем удалите все очищенные файлы, скомпилируйте и затем удалите все ошибочные #imports.

Я также должен добавить, вам нужно избегать файлов, на которые есть ссылки из файлов .xib или .sdef, и могут быть другие случаев динамического связывания, но он все равно может дать вам хорошее представление о том, что можно удалить.

Тот же метод можно использовать, чтобы увидеть, какие #imports можно удалить - вместо усечения файла удалите каждый #import в файле по очереди и посмотрите, не завершится ли сборка.

1
ответ дан 24 November 2019 в 05:17
поделиться