静态分析工具Cppcheck在Windows上的使用

2023-11-09

      之前在https://blog.csdn.net/fengbingchun/article/details/8887843 介绍过Cppcheck,那时还是1.x版本,现在已到2.x版本,这里再总结下。

      Cppcheck是一个用于C/C++代码的静态分析工具,源码地址为https://github.com/danmar/cppcheck ,最新发布版本为2.10,License为GPL-3.0.它支持在Windows、Linux、Mac上安装

      Cppcheck提供了独特的代码分析来检测bugs,并专注于检测未定义的行为和危险的编码结构。它的目标是仅检测代码中的真正错误,并生成尽可能少的误报。Cppcheck关注bug而不是代码风格。

      静态分析是一个非常大的领域,Cppcheck只涵盖了其中的一部分。没有一种工具能覆盖整个领域。每个工具都有独特的代码分析,使用一组工具比使用一种工具要好,是很好的补充。

      未定义的行为(undefined behaviour)包括

      (1).dead pointers;

      (2).除以0;

      (3).整数溢出;

      (4).无效的位移操作;

      (5).无效的转换;

      (6).STL的用法无效;

      (7).内存管理;

      (8).空指针解引用;

      (9).越界检查;

      (10).未初始化的变量;

      (11).写const数据;

      安装:从https://github.com/danmar/cppcheck/releases/tag/2.10 下载cppcheck-2.10-x64-Setup.msi,双击进行安装,并将安装路径即cppcheck.exe所在路径加入到系统环境变量中。

      结果消息(messages)包括

      (1).error: 执行代码时未定义的行为或其它错误,如内存泄漏;

      (2).warning: 执行代码时可能存在未定义的行为;

      (3).style: 风格问题,例如未使用的函数、冗余代码、constness、运算符优先级、可能的错误;

      (4).performance: 基于常识(common knowledge)的运行时性能建议;

      (5).portability: 可移植性警告;

      (6).information: 配置问题,与语法正确性无关.

      注意事项

      (1).通过执行cppcheck.exe --help 可查看支持哪些输入参数;

      (2).语法: cppcheck.exe [options] [files or paths]

      (3).--file-filter=<str>: 设置文件过滤器,并且仅检查与过滤器匹配的文件;如--file-filter=*bar.cpp 只分析以bar.cpp结尾的文件;

      (4).--cppcheck-build-dir=<dir>: Cppcheck将分析信息保存在该文件夹中,推荐使用.优点:加快分析速度,使增量分析成为可能;使用多个线程时也可以进行全程序(whole program)分析;

      (5).--enable=<id>: id可为all, warning, style, performance, portability, information, missingInclude; all启用所有检查,当扫描整个程序时,建议只使用all,因为这会启用unusedFunction;可以指定多个id,用逗号分开;

      (6).--file-list=<file>: 在文本文件中指定要check的文件;

      (7).-I <dir>: 给出搜索include文件的路径,可有多个-I;

      (8).--include=<file>: 在checked文件之前强制include一个文件;

      (9).--output-file=<file>: 将结果写入文件;

      (10).-v或--verbose: 输出更详细的错误信息.

      这里使用GitHub Messy_Test/demo/Messy_Test 中的代码进行测试,执行命令如下所示:

      在当前的results目录生成一些文件,打开其中的result.txt,内容如下:对有问题的代码行给出原因说明

 

      GitHub: https://github.com/fengbingchun/Messy_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态分析工具Cppcheck在Windows上的使用 的相关文章

  • cppcheck代码检查工具安装与使用技巧

    cppcheck代码检查工具安装与使用技巧 Cppcheck 是一种 C C 43 43 代码缺陷静态检查工具 不同于 C C 43 43 编译器及很多其它分析工具 xff0c 它不检查代码中的语法错误 Cppcheck 可以检查非标准代码
  • Linux下gdb attach的使用(调试已在运行的进程)

    在Linux上 执行有多线程的程序时 当程序执行退出操作时有时会遇到卡死现象 如果程序模块多 代码量大 很难快速定位 此时可试试gdb attach方法 测试代码main cpp如下 这里为了使程序退出时产生卡死现象 在第51行时push线
  • CppCheck代码静态检测工具

    文章目录 一 简述 二 安装 二 使用 2 1 第一个测试程序 2 2 检查文件夹中所有文件 2 3 检查部分或过滤部分文件 三 严重性 四 其他常用用法 4 1 启用其他检查 4 2 保存结果到文件 4 3 多线程检查 4 3 设置目标平
  • cppcheck支持MISRA C 2012

    1 从官网下载cppcheck安装包然后安装 cppcheck官网 https sourceforge net projects cppcheck 下载windows平台的安装包后 双击安装包文件 安装 默认会安装GUI版本 安装完成后 需
  • 单元测试和白盒测试相关总结

    一 软件测试方法 1 软件测试方法包括 白盒测试 White Box Testing 黑盒测试 Black Box Testing 灰盒测试 静态测试 动态测试 2 白盒测试 是一种测试用例设计方法 在这里盒子指的是被测试的软件 白盒 顾名
  • Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

    关于Valgrind的介绍可以参考 https blog csdn net fengbingchun article details 50196189 这里介绍下在Ubuntu 16 04上通过android toolchain如andro
  • 静态分析工具Cppcheck在Windows上的使用

    之前在https blog csdn net fengbingchun article details 8887843 介绍过Cppcheck 那时还是1 x版本 现在已到2 x版本 这里再总结下 Cppcheck是一个用于C C 代码的静
  • 内存检测工具Dr. Memory的使用

    Dr Memory是一个内存调试工具 它是一个开源免费的内存检测工具 它能够及时发现内存相关的编程错误 比如未初始化访问 内存非法访问 数组越界读 写 以及内存泄露等 它可以在Linux Windows Mac OS和Android操作系统
  • 内存检测工具Dr.Memory在Windows上的使用

    之前在https blog csdn net fengbingchun article details 51626705 中介绍过Dr Memory 那时在Windows上还不支持x64 最新的版本对x64已有了支持 这里再总结下 Dr M
  • 软件的最低测试方法

    前言 1 1 引言 对于大部分软件系统 如何测试及有效的测试 是一个很头痛的问题 在软件工程上 测试是软件工程中极其重要的一部分 但在具体的实际情况上 无论是时间 人手及资源的调配等原因 使国内大部分软件公司没有进行过理论上的完整的测试 本
  • Ubuntu下安装Cppcheck源码操作步骤

    Cppcheck是用在C C 中对code进行静态检查的工具 它的源码在 https github com danmar cppcheck 它的License是GPL 3 0 Cppcheck可以检查不通过编译的文件 执行的检查包括 1 自
  • scanf Cppcheck警告

    Cppcheck 显示 scanf 的以下警告 Message scanf without field width limits can crash with huge input data To fix this error messag
  • 为什么Cppcheck没有发现这个明显的数组越界错误?

    我安装了Cppcheck http cppcheck sourceforge net 我的 C 项目的静态代码分析工具 感觉它的性能很差 例如 谁能告诉我whyCppcheck无法在以下代码中找到数组越界错误 void f int c ch
  • 当另一个函数返回指针时未检测到空指针取消引用问题

    我使用 SonarQube 5 1 和 cppecheck 1 70 来分析 C 代码 在以下示例中 存在应由 SonarQube 和 或 Cppcheck 由 Sonar 使用 检测到的空指针取消引用问题 但 SonarQube 没有发现
  • 如何使用CMAKE_EXPORT_COMPILE_COMMANDS?

    我一直在尝试使用clang modernize with CMAKE EXPORT COMPILE COMMANDS按照该工具的帮助中的建议 使用此选项 cmake 生成一个包含编译信息 如包含路径 的 JSON 文件 see also h
  • cppcheck 的规则集

    cppcheck允许你创建自己的规则文件 但我不知道cppcheck的功能暴露了多少 是否有人正在开发一套可以强制执行的JSF http www stroustrup com JSF AV rules pdf or MISRA http w
  • C++ 可能的空指针取消引用

    我对一些代码运行了 cppcheck 以查找可能的运行时错误 在以下情况下 它报告可能存在空指针取消引用 Foo x defined somewhere Foo y x possible null pointer dereference 编
  • 动态数组:使用 realloc() 无内存泄漏

    我使用 realloc 来调整分配的内存大小 char get channel name void char result int n result char 0 for elem snd mixer first elem handle n
  • 在 C 程序中追踪数组越界访问/写入的推荐方法

    考虑用 C 语言编写一些不太明显的算法的实现 例如 让它成为递归快速排序 我在 K N King 的 C 编程 现代方法 第二版 书中找到了它 可以从here http knking com books c2 programs qsort
  • 我真的应该大量引入explicit关键字吗?

    When I used the recently released Cppcheck 1 69 on my code1 https i stack imgur com tHt25 png it showed a whole lot of m

随机推荐