Sonar 是一个用于代码质量管理的开源平台。通过插件,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,对不同规模和种类的工程进行代码质量管理。
1. SonarQube 在进行 C/C++ 代码质量管理时的工作原理:
SonarQube 服务器根据分析报告按照对应的规则展示扫描的结果。只使用 sonar-scanner 是无法扫描 c++ 的,SonarQube 服务器上的 sonar-cxx 插件本身是不会运行任何静态代码分析工具的,需要通过 cppcheck、valgrind 等分析工具。所以需要确保在分析之前生成报告。
集成每个代码静态分析工具的思路,其实就是先使用 Cppcheck 分析工具给你的项目代码在本地扫一遍,并在项目目录生成相应的 xml 报告,然后 sonar-scanner 将报告和代码上传到 SonarQube 服务器,通过服务器上的 sonar-cxx 插件使这些报告与 SonarQube 的代码规则进行匹配,最终展示缺陷结果。
2. Sonar 接入实现 C/C++ 代码质量分析的过程:
2.1 在 SonarQube 服务器上初始化项目 【test:project-alpha-1.x】。
2.2 在 SonarQube 服务器上提供令牌。
该令牌用于在执行分析时识别您。如果它已被泄露,您可以随时在您的用户帐户中撤销它。
以下是根据 xxx@xxx.com 生成的令牌:
token: 19t81a5123a90ga25123a90ga25
2.3 我们在 SonarQube 上初始化了项目,现在来启动分析!
-
sonar 服务器生成 token 中,哪个选项最能描述您的构建?
Maven,Gradle,.NET,Other(用于 JS、TS、Go、Python、PHP,…)。此处选择 Other。 -
sonar 服务器生成 token 中,What is your OS?
Linux,Windows,macOS。此处选择 Windows。 -
下载并解压缩适用于 Windows 的 Scanner 应用。访问 Scanner官方文档下载最新版本(sonar-scanner-cli-4.7.0.2747-windows.zip)。
-
并将 Scanner 应用的 bin 目录添加到 %PATH% 环境变量中(Setting - Advanced system setting - System Property - Enviroment Variables - System variables - path, 添加 “D:\Workspace\Sonar\sonar-scanner-4.7.0.2747-windows\bin”)。
-
从您的计算机执行 Scanner。运行 SonarQube 分析非常简单。您只需要在项目文件夹中执行以下命令。详细请访问 Scanner 的官方文档。
sonar-scanner.bat -D"sonar.projectKey=VR:ue-launcher" -D"sonar.sources=." -D"sonar.host.url=http://xxx.xx.xxx.xxx:1000" -D"sonar.login=19t81a5123a90ga25123a90ga25"
-
分析完成后,该页面会自动刷新,或者打开 http://
xxx.xx.xxx.xxx:1000
手动刷新(根据生成报告上传的大小,可能需要几秒,多刷新几次),你可以浏览分析结果。
此时可以看到没有使用 C++ 代码静态分析工具生成 xml 报告,数据和显示结果都默认是空的,没有产生 C++ 项目对应的 bug。 -
这是因为 SonarQube 需要读取 cppcheck 分析后的结果,因此我们需要写一个配置文件让 sonar-scanner 读取 cppcheck 分析后的结果。
2.4 CppCheck 代码缺陷静态检查工具。
C/C++ 代码的静态分析。
检查:内存泄漏、不匹配的分配释放、缓冲区溢出等等。目标是 0% 的误报。有关详细信息,请参阅 https://cppcheck.sourceforge.io。
Cppcheck 只检查编译器检查不出来的 bug,不检查语法错误。也可以使用一些其他分析工具。
-
安装 cppcheck。此处选择 Windows 64-bit (No XP support) 版本。也可以通过 Source Code 生成。
-
将 Cppcheck 应用的 bin 目录添加到系统 %PATH% 环境变量中。
Setting - Advanced system settings - System Properties - Environment Variables - System Variables - Path,添加安装路径D:\Program Files\Cppcheck
。 -
测试一下安装是否成功。控制台使用以下指令:
cppcheck
-
在项目根目录下生成配置文件。
cppcheck -j 1 --enable=all --xml ./* 1>cppcheck-result.xml 2>&1
可以看到项目中产生了两个文件:cppcheck.report.xml、cppcheck-result.xml。
后期需要在 sonar-project.properties 中加入:
sonar.cxx.cppcheck.reportPath=cppcheck-result.xml
soanr.cxx.includeDirectories=/
2.5 配置您的项目。
此处使用的是 git 本地 master 仓库的项目根目录 “project-alpha-1.x”。
在项目的根目录中创建一个名为 sonar-project.properties 的配置文件。
# defaults to project key # sonar 平台中对应项目的名字 sonar.projectName=test:project-alpha-1.x # defaults to 'not provided' # sonar 平台中对应项目的版本号 sonar.projectVersion=1.x # Path is relative to the sonar-project.properties file. Defaults to . # sonar 检测的源文件目录,‘.’表示当前根目录下的所有文件 # sonar.sources=. sonar.sources=Plugins,Source # sonar 检测的语言种类 sonar.language=cxx sonar.cxx.file.suffixes=.h,.cpp # Encoding of the source code. Default is default system encoding # sonar 平台中对应项目的编码格式 sonar.sourceEncoding=UTF-8 sonar.host.url=http://xxx.xx.xxx.xxx:1000/ sonar.login=19t81a5123a90ga25123a90ga25 sonar.scm.disabled=true sonar.java.binaries=target/classes sonar.cfamily.build-wrapper-output=build_wrapper_output_directory sonar.cxx.cppcheck.reportPaths=cppcheck-result.xml sonar.cxx.includeDirectories=/
2.6 安装并运行 SonarScanner。
请执行以下步骤:
-
将下载的文件展开到您选择的目录中。在接下来的步骤中,我们将其称为 $install_directory。
-
通过编辑 $install_directory/conf/sonar-scanner.properties 更新全局设置以指向您的 SonarQube 服务器:
#Configure here general information about the environment, such as SonarQube server connection details for example #No information about specific project should appear here #----- Default SonarQube server sonar.host.url=http://xxx.xx.xxx.xxx:1000 #----- Default source code encoding sonar.sourceEncoding=UTF-8
-
将 $install_directory/bin 目录路径添加到您的系统环境变量。
-
通过打开一个新的 shell 并执行命令
sonar-scanner 或
sonar-scanner -h(在 Windows 上为 sonar-scanner.bat -h)来验证您的安装。你应该得到这样的输出:usage: sonar-scanner [options] Options: -D,--define <arg> Define property -h,--help Display help information -v,--version Display version information -X,--debug Produce execution debug output
如果您需要更多调试信息,可以在命令行中添加以下内容之一:-X、—verbose 或 -Dsonar.verbose=true。先使用 cppchek 生成 XML 分析报告,然后使用 sonar-scanner 完成扫描上传。先在项目根目录执行:
cppcheck -j 1 --enable=all --xml ./* 1>cppcheck-result.xml 2>&1
然后从项目根目录运行以下命令以启动分析并传递您的身份验证令牌:sonar-scanner -D sonar.login=19t81a5123a90ga25123a90ga25
如果您完成登录过程,也可以直接运行:
sonar-scanner
最后等待 SonarQube 服务器刷新,或手动刷新即可看到展示结果。
相关推荐
网络安全督查常态化为电网建设保驾护航.docx网络安全督查常态化为电网建设保驾护航.docx网络安全督查常态化为电网建设保驾护航.docx网络安全督查常态化为电网建设保驾护航.docx网络安全督查常态化为电网建设保驾护航...
半导体行业深度研究:半导体检测设备:从前道到后道,全程保驾护航.pdf
这些数据来源于设备供应商,并且通过资产属性和PMQ用例,如资产维修、产品维保、流程质量关联优化,提供决策支持。 从技术实现的角度来看,预测性维修解决方案可以包含以下几个关键步骤:业务理解、特征选取、预测...
随着信息成为企业的命脉和日新月异世界里制胜的法宝,数据保护也受到空前的关注。作为备份和恢复解决方案提供商,Veritas有着统观企业的全局视角,紧跟最新发展趋势,可以帮助 IT 部门解决加速企业数字化转型而产生...
法治如何为大数据保驾护航.docx
安全,为幸福保驾护航.docx
网络安全为5G保驾护航.pdf
FPGA为您的系统安全保驾护航.pdf
风险管理为中央企业保驾护航.docx
快充网络 为电动汽车保驾护航.pdf
并网标准为电力系统安全运行保驾护航.pdf
先进机床为新能源产业升级保驾护航.pdf
T506_SAP为成长型企业融资上市保驾护航.pdf
大码头镇:为中小学复学工作保驾护航
政府采购为新能源公交保驾护航.pdf
标准化为我国云计算产业发展保驾护航.pdf
通过学习和实践Windbg的使用,开发者可以更高效地定位和解决C++程序中的复杂问题,提升调试技能,为软件质量保驾护航。阅读《windbg详解2.pdf》和《windbg详解.pdf》这两份文档,将深入理解Windbg的更多高级特性,助...
网吧个人使用的快速还原 为你的系统保驾护航 一般网吧为全盘保护 个人建议只保护C盘 注:桌面属于C盘 请修改系统变量 或者使用超级兔子 移动我的文档和桌面到其他不受保护的分区 安装还原以后 每次重新启动电脑 对...
UCloud混合云为电商大促保驾护航.pptx