在针对C和C ++的嵌入式系统的开发中使用PVS-Studio静态分析器

在本文中,您将学习如何运行嵌入式项目检查以及如何使用分析器报告。 PVS-Studio分析仪支持许多用于嵌入式系统的编译器。 在当前版本中,使用以下用于Windows,Linux和macOS的编译器之一进行编译时,可以检查项目:


安装方式


安装过程取决于您正在开发的操作系统。 在Linux下,您可以从存储库或安装包中安装分析器。

基于Debian的系统的示例:

wget -q -O - https://files.viva64.com/etc/pubkey.txt | sudo apt-key add - sudo wget -O /etc/apt/sources.list.d/viva64.list \ https://files.viva64.com/etc/viva64.list sudo apt update sudo apt install pvs-studio 



 sudo gdebi pvs-studio-VERSION.deb 

对于macOS,可以通过Homebrew完成安装和更新:

 brew install viva64/pvs-studio/pvs-studio brew upgrade pvs-studio 

第二个选项是从dmg安装软件包或从存档手动解压缩。

在Windows下,使用安装程序执行安装:


您可以下载所有受支持系统的安装软件包,并且,如有必要,请在“ 下载并尝试PVS-Studio ”页面上请求试用密钥。

安装后,输入许可证密钥。 您可以在文档页面“ 如何输入PVS-Studio许可证以及下一步做什么 ”中找到有关如何在不同平台上执行此操作的信息。

项目验证


嵌入式系统的项目验证可以与在Windows,Linux和macOS下进行开发时相同的方式执行。

文章“ 在Linux环境中开发C ++程序时介绍PVS-Studio静态分析器 ”中讨论了Linux的启动选项。 请记住,由于交叉编译用于在嵌入式环境下进行构建,并且编译器名称可能是非标准的,因此在分析项目时可能需要指定它。 为此,请使用–compiler–c命令行选项

 pvs-studio-analyzer analyze -c MyCompiler 

当分析器无法确定使用的编译器类型时,即发出错误“找不到编译单元”时,请使用此参数。

交叉编译时,由于目标平台与进行汇编的平台不同,因此您可能需要使用--platform参数以及预处理器的类型( --preprocessor )来指定目标平台。

支持的平台: win32,x64,linux32,linux64,macos,arm。

支持的预处理器: gcc,clang,keil。

默认情况下,Linux选择linux64平台和gcc预处理器。

如果使用Windows,则可以在编译监视模式下检查项目。 为此,请运行分析器附带的“ C and C ++ Compiler Monitoring UI ”实用程序。 要开始监视,请转到“ 工具”菜单,然后单击“ 分析文件... ”,将打开一个对话框:


单击“ 开始监视 ”按钮并运行构建。 完成后,在屏幕右下角的对话框中单击“ 停止监视 ”按钮:


可以在“ C and C ++ Compiler Monitoring UI ”实用程序的主窗口中查看测试结果。

您也可以从命令行运行分析。 为此,使用了实用程序CLMonitor。 您可以使用以下命令开始监视:

 CLMonitor.exe monitor 

组装完成后,您应该在分析模式下运行该实用程序:

 CLMonitor.exe analyze -l "<path>\out.plog" 

分析器将检查项目并将结果保存到-l参数中指定的文件中。

另请参见文档部分“ PVS-Studio中的编译监视系统 ”。

处理报告


要在Linux下查看报告,您需要使用plog-converter实用程序将通过分析器获得的文件转换为支持的格式之一。 您可以使用以下命令以HTML格式获取报告并能够查看源代码:

 plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir 

在Linux中开发C ++程序时熟悉PVS-Studio静态分析器 ”一文中更详细地描述了报告的转换。

在Windows下,还有一个PlogConverter实用程序,可让您以类似的方式转换报告文件:

 PlogConverter.exe <path>\out.plog --renderTypes= FullHtml --analyzer=GA:1,2 



 PlogConverter.exe D:\Projct\out.plog -t FullHtml -a GA:1,2 

同样,可以使用实用工具“ C and C ++ Compiler Monitoring UI ”通过菜单File-> Open PVS-Studio Log ...查看plog格式的报告

一个例子:


如有必要,您可以通过此实用程序通过“ 文件”菜单将报告导出为支持的格式之一。

MISRA标准


PVS-Studio根据CWESEI CERT对警报进行分类,适用于普通应用程序的静态安全测试( SAST )。 但是,嵌入式系统的安全要求略有不同,特别开发的MISRA标准涵盖了这些要求。 当前版本的分析仪支持MISRA C和MISRA C ++的部分规则,可在此处查看诊断列表,并且该列表正在不断扩展。

在检查非嵌入式项目时,通常不合理使用MISRA规则。 这是由于该标准的细节。 在大多数情况下,如果代码最初并不是按照MISRA的要求编写的,则在检查过程中会出现许多错误和无用的警告。 因此,默认情况下禁用MISRA规则。

要在Linux下启用MISRA分析,您需要使用-a开关运行分析,并传递设置所需模式的数字参数。 此参数是位字段的组合:

 -a [MODE], --analysis-mode [MODE] MODE defines the type of warnings: 1 - 64-bit errors; 2 - reserved; 4 - General Analysis; 8 - Micro-optimizations; 16 - Customers Specific Requests; 32 - MISRA. Modes can be combined by adding the values Default: 4 

启动示例(包括GA和MISRA诊断程序):

 pvs-studio-analyzer analyze -a 36 -o /path/report.log 

使用plog-converter时 ,还必须指出报告中应包括 MISRA诊断:

 plog-converter -a MISRA:1,2,3 -m misra .... 

在Windows下,可以使用“ C and C ++ Compiler Monitoring UI ”实用程序设置对话框:


有关MISRA支持的更多详细信息,请参见“ PVS-Studio:对MISRA C和MISRA C ++编码标准的支持 ”。

结论


在本文中,我们回顾了PVS-Studio分析仪测试集中于嵌入式系统的项目的功能。 如果您需要有关如何使用分析仪的更多详细信息,建议阅读以下文章:




如果您想与讲英语的读者分享这篇文章,请使用翻译链接:Yuri Minaev。 在嵌入式系统的C和C ++开发中使用PVS-Studio静态分析器

Source: https://habr.com/ru/post/zh-CN463335/


All Articles