Как лечить предупреждения из Clang Static Analy Code в качестве ошибок в XCode 3?

StackOverflow https://stackoverflow.com/questions/5033417

Вопрос

Вопрос

run_clang_static_analyzer ("RUN Статический анализатор") Настройка проекта нашла важные проблемы в нашем проекте. Мы обратились к ним, и мы хотим предотвратить будущие проблемы из ползучести.

Мы пытаемся получить предупреждения по анализу Clang рассматриваются как ошибки на Разрушите нашу сборку . До сих пор не хватает успеха, несмотря на то, что «лечить предупреждения в качестве ошибок») включено.

Пример проблемы

Следующий вызов анализа, генерируемый в XCode:

/ developer / usr / bin / clang -x objective-c [...] --analyze [...] / noodcledcode.m -o [...] / supplebleTarget.build/staticanalyzer/normal/i386 /Trubledcode.plist

производит статический анализ кода, предупреждение:

[...]/TroubledCode.m:38:34: warning: Potential leak of an object allocated on line 38 and stored into 'leakingManager'
    Manager *leakingManager = [[Manager alloc] init];
                              ^
1 warning generated.
.

Но XCode отчеты «Построить успешно ... 1 анализатор». Решение, которое мы ищем, сделаем приведенный выше примера, генерируемый «неисправностью сборки».


Решение

Я взял совет Джима и создал сценарий сборки.

Чтобы избежать ложных аварийных сигналов, я проходил беда уверены, что он игнорирует остаток посторонней анализа. Это решение должно работать при наращивании от Xcode IDE и при наращивании вашего проекта используя xcodebuild.

Чтобы включить предупреждения анализа XCode 3 в построение ошибок:

    .
  • Дважды щелкните проект или целевой вопрос.
  • Под вкладкой построить, установите флажок в настройках> Связывание> Написать файл карты ссылки

    Эта настройка также известна как LD_GENERATE_MAP_FILE.

      .
    • в разделе «Группы и файлы»> «Цели», нажмите на раскрытие треугольника цели, которую вы хотите добавить эту функцию.
    • Щелкните правой кнопкой мыши «Бинарную ссылку с фазой библиотеки».
    • Выбор Добавить> Новая фаза сборки> Новый этап сборки сценариев
    • Необязательно: Переименовать фазу «Запустить сценарий», которую вы только что добавили, чтобы «лечить предупреждения Clang как ошибки».
    • Дважды щелкните новый фаза сценария, если она еще не открыта.

      Скопируйте содержимое ниже и вставьте его в раздел «скрипт».

      error_count=0
      
      ##
      
      function verify_clang_analysis_at_path()
      {
        local analysis_path=$1
        local plist_tool=/usr/libexec/PlistBuddy
        local diagnostics=$($plist_tool -c "print diagnostics" $analysis_path)
      
        if [[ $diagnostics != $'Array {\n}' ]]
        then
          ((error_count++))
        fi
      }
      
      function verify_clang_analysis_for_object_file()
      {
        local object_file=$1
        local analysis_directory=$TARGET_TEMP_DIR/StaticAnalyzer/$CURRENT_VARIANT/$CURRENT_ARCH
        local analysis_path=$analysis_directory/${object_file%.*}.plist
      
        # if this object file corresponds to a source file that clang analyzed...
        if [ -e $analysis_path ]
        then
          verify_clang_analysis_at_path $analysis_path
        fi
      }
      
      ##
      
      object_directory=$OBJECT_FILE_DIR-$CURRENT_VARIANT/$CURRENT_ARCH
      object_path_pattern=${object_directory}'/\(.\)\+\.o$'
      
      index_pattern='\[[[:space:]0-9]*\][[:space:]]'
      
      object_paths=$( 
        grep $object_path_pattern $LD_MAP_FILE_PATH | sed s/$index_pattern//
      )
      
      ##
      
      for object_path in $object_paths 
      do
        object_file=${object_path##*/}
        verify_clang_analysis_for_object_file $object_file
      done
      
      if [ $error_count -gt 0 ]
      then
         echo "Clang static code analysis failed for" $error_count "source file(s)."
      fi
      
      exit $error_count
      
      .

      Обновление

      Mike Vosseller имеет обновленная версия этого скрипта для XCode 5 .

Это было полезно?

Решение

We've been planning on having a separate build step to run the analyzer and check the results. We'll fail the build on the build server that way. That won't help you locally, though.

Другие советы

Xcode has a "Treat warnings as errors" checkbox. If you can't find it, which has been said for some iPhone projects, just add "-Werror" to your WARNING_CFLAGS in the Build Settings for your target(s) in question.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top