Sonarcloud не находит явных проблем с Си
Я сделал очень простой C-файл, чтобы проверить вывод sonarcloud при использовании C-кода. Весь мой код такой:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
for(int j = 0; j < 100; j++) {
void* unreleasedMemory = malloc(1024);
printf("Address: %p\n", unreleasedMemory);
}
printf("Uninitialized i is: %d", i);
return 0;
}
Когда я запускаю новый проект в sonarcloud и выполняю команды build-wrapper и sonar-scanner, например:
build-wrapper-macosx-x86 --out-dir bw-output cmake .
После этого:
sonar-scanner \
-Dsonar.projectKey=ctest \
-Dsonar.organization=<orgname> \
-Dsonar.sources=. \
-Dsonar.cfamily.build-wrapper-output=bw-output \
-Dsonar.host.url=https://sonarcloud.io \
-Dsonar.login=<tokenvalue>
Вывод обоих параметров выглядит нормально. К сожалению, он не обнаруживает эти довольно очевидные ошибки:
Что я делаю не так, чтобы sonarcloud подобрал их?
1 ответ
Цитирование https://docs.sonarqube.org/display/PLUG/Building+on+Mac+OS+X:
Добавьте выполнение Build Wrapper в качестве префикса к обычной команде сборки, которую вы используете для сборки вашего проекта (в приведенном ниже примере используется xcodebuild, но можно использовать любой инструмент сборки, который выполняет полную сборку)
Другими словами: все файлы, которые должны быть проанализированы, должны быть скомпилированы во время выполненияbuild-wrapper
, Это нужно, потому что build-wrapper
отслеживает вызовы компилятора для сбора информации о том, какие файлы скомпилированы в вашем проекте и с какими параметрами, затем эта информация используется для анализа во время выполнения sonar-scanner
,
Я серьезно сомневаюсь, что ваше исполнение cmake .
выполняет компиляцию main.c
- он просто генерирует make-файлы, и поэтому main.c
на самом деле не анализируется должным образом.
Исполнение
cmake .
build-wrapper-macosx-x86 --out-dir bw-output make clean all
с последующим исполнением sonar-scanner
с -Dsonar.cfamily.build-wrapper-output=bw-output
дает желаемый результат: