Sonarcloud 没有发现明显的 C 问题

Sonarcloud not finding obvious C problems

我做了一个非常简单的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 会接收它们?

引用 https://docs.sonarqube.org/display/PLUG/Building+on+Mac+OS+X :

Add execution of Build Wrapper as a prefix to the usual build command that you use to build your project (the example below uses xcodebuild, but any build tool that performs a full build can be used)

换句话说:所有应该分析的文件都必须在build-wrapper执行期间编译。这是必需的,因为 build-wrapper 监视编译器调用以收集有关在项目中编译了哪些文件以及使用哪些选项的信息,然后在 sonar-scanner.

执行期间使用此信息进行分析。

我严重怀疑您对 cmake . 的执行执行了对 main.c 的编译 - 它只是生成生成文件,因此这就是 main.c 实际上没有被正确分析的原因。

执行

cmake .
build-wrapper-macosx-x86 --out-dir bw-output make clean all

随后执行 sonar-scanner-Dsonar.cfamily.build-wrapper-output=bw-output 产生期望的结果: