首页 > 解决方案 > Sonarcloud 没有发现明显的 C 问题

问题描述

我制作了一个非常简单的 C 文件,只是为了在使用 C 代码时测试 sonarcloud 的输出。我的整个代码是这样的:

#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 会接他们?

标签: sonarqubesonarcloud

解决方案


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

将 Build Wrapper 的执行添加为您用于构建项目的常用构建命令的前缀(下面的示例使用 xcodebuild,但可以使用任何执行完整构建的构建工具)

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

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

执行

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

然后执行sonar-scannerwith-Dsonar.cfamily.build-wrapper-output=bw-output会产生所需的结果:

例子


推荐阅读