电子产业一站式赋能平台

PCB联盟网

搜索
查看: 129|回复: 1
收起左侧

使用Cppcheck对代码进行静态检查

[复制链接]

1001

主题

1001

帖子

8807

积分

高级会员

Rank: 5Rank: 5

积分
8807
发表于 2025-3-7 08:04:00 | 显示全部楼层 |阅读模式

kmyfksdmjvn6401594914.gif

kmyfksdmjvn6401594914.gif

% U' l2 m; b. ^$ x点击上方蓝色字体,关注我们
  h1 R& B4 P- V0 H3 k. F  k
1 v4 h# e5 r; k2 s' m6 x: m) b& G* E+ }. n
我之前团队习惯使用QAC这款强大的静态分析工具。 然而,QAC 是一款付费软件,让许多普通规模的汽车相关企业,尤其是初创型公司或是预算有限的中小企业望而却步。# o; B; F; A' c( [2 a0 S

# S" w' N0 j+ s; R  r3 `在没有充足资金投入购买此类工具的情况下,难道就只能放弃高效的静态检查了吗?实则不然。$ j  _, s4 U0 z% a& \+ }$ s

2 b# S  q" P9 B+ N2 p在此,强烈推荐使用 Cppcheck 这款开源免费的静态代码分析工具。4 \: N2 s4 n( T: R7 ^

, U. k% r4 Z+ e! T! ^* X+ S3 d

hofspzxwodu6401595015.png

hofspzxwodu6401595015.png

% i7 R8 B% ~9 t9 H
1 ?3 s8 M1 h) A- G- gCppcheck 拥有诸多优势,一方面,它支持对 C 和 C++ 代码进行广泛且细致的检查,无论是常见的空指针引用、数组越界、内存泄漏等经典错误,还是较为隐晦的未初始化变量使用、逻辑运算优先级混淆等问题,都能被有效识别。! i5 U0 w  H; @  x, k) L" F
) ?- ~0 K+ }- R% a% ~
另一方面,它具有出色的跨平台特性,无论是 Windows、Linux 还是 Mac 系统,都能无缝适配,这对于汽车嵌入式开发中多样的开发环境来说极为便利。
0 _! `- F$ C) _3 w& g+ }& @" n9 d/ Y0 ?( m1 e

glzholkjvsh6401595115.png

glzholkjvsh6401595115.png
; N2 g4 P2 y! J6 i
) |0 X- i# U. n# `) |0 l
下载链接:https://cppcheck.sourceforge.io/ ( R. d/ [3 z) |) _: [( h" F

+ O. a; k; F; r4 ^) d 这里我使用的是Windows版本安装完成后,效果如下:* |5 ?& s, m! N  {9 ?

# U* h% |% U- s

qhxaoj3lps56401595215.png

qhxaoj3lps56401595215.png
- Z8 n0 |( S& y5 p8 d0 f

# Z( l9 N2 I$ n) Y5 f4 iCppcheck的使用比较简单,主要分为两步,一是整理好需要检查的软件代码工程;二是使用Cppcheck进行检查。8 Y: s" p8 A& x  i
1* d; o- z& Z6 |3 O
整理代码工程
* S5 E" ?( l( x. a3 T拷贝一份代码工程用于做静态检查,整理代码工程只需要保留软件工程中的所有头文件和源文件,其他的编译文件、配置文件等,全部删除就可以。
5 O9 Z' B9 X9 F: o8 Z2 l. _
; `) I! c2 ]$ M1 _0 E原工程如下:0 s2 ?2 ~& N/ M/ d: Y) X0 t- e. Y

' t7 `9 T6 W3 @" S& Z

dtcgasxahm06401595315.png

dtcgasxahm06401595315.png
' z& O5 z' {2 k( f

4 ^( L! D0 n. U. y整理后效果如下:5 f6 J( r3 y5 r" r1 [

! B$ J" t! q# p" F  n2 M& g0 p

j1qeof1rsg26401595415.png

j1qeof1rsg26401595415.png

- X5 G% e" G0 I2
( V1 e; T# H( S& b静态检查! @) Q! B1 c/ q" `5 i
静态检查前,需要将Cppcheck软件的检查设置修改成我们预期的检查项,以下是我的静态检查设置:
% F$ e4 y  R4 O  ?& [9 t0 A: g) ~1 c* ?( Q2 d

zvdmsowfw036401595515.png

zvdmsowfw036401595515.png

; z# ^* l4 n. d2 @/ b1 E- E. S" Z9 o" u% E& i

u4p4giteu356401595615.png

u4p4giteu356401595615.png
# @: o7 [# j1 ?
4 w7 o3 |% g" c9 Z: n; j
点击分析,选择目录,加载需要静态检查的软件工程:
* m- ?: m1 U* }
) W5 h+ Z7 S/ p5 |$ ]: i

i4ntzsvzbwi6401595715.png

i4ntzsvzbwi6401595715.png

( \' c  d+ s: E" s2 b( G$ V; R. X& b6 D9 P8 |1 V$ x) U
导入软件工程后,立刻会开始静态检查:
4 ]) u) i  k- O# S8 j! q* [! W) I$ j; X& i, O

suf1vryrfmd6401595815.png

suf1vryrfmd6401595815.png

4 V$ j8 c, F5 d$ v8 }+ j: x  `5 }  y
静态检查后可以看到有问题文件的说明,结果如下:
2 K  i( A4 ]; ~* W. W
/ s5 T; c, N9 z

51hli3wwwrd6401595915.png

51hli3wwwrd6401595915.png
+ M7 Z8 O0 [6 I0 N; Q3 b

' Y5 _9 x4 L. o$ k! o. }7 N; X; \5 f也可以设置过滤,查看不同等级的静态检查结果。 & p" y% y8 ]# _3 k- V

' T8 V& `- D; g5 S

kogyqvsg2ta6401596016.png

kogyqvsg2ta6401596016.png

; H0 r: b# V8 B# k; |& f; [. \5 w- e' [
最后,可以在统计中查看检查结果汇总。4 F* B" R$ y" ^' n. {# n

2 E4 G0 d6 [( q

vgejozbbxun6401596116.png

vgejozbbxun6401596116.png

/ X# E3 ~/ T. u/ Y3 c9 j' O" r, }- J- Y0 V8 Q1 G$ m! x
可以将结果导出成PDF文件。
) Q3 d' b: t  Z% [
0 V- n( c. f8 K7 Q- ]6 z

xgjuypcptau6401596216.png

xgjuypcptau6401596216.png
' |% D0 F- u9 b4 c3 x* P
$ [* c7 y( v2 e' o4 Y% r
结果参数说明如下:
1 `) r$ s3 _5 S4 s" R
  • error:指代代码里存在的错误项,像内存泄漏这类情况。
  • warning:给出的编程改进意见,目的在于避免产生 bug。
  • style:涉及编码风格相关内容,会提示哪些函数未被使用以及多余代码等情况。
  • portability:提示在跨平台时容易出现的一些问题。
  • performance:表明该部分代码具备可优化的空间。
  • information:属于其他信息,可予以忽略。8 K. ]" o7 a0 u, `" U
    静态检查结果PDF如下:1 A6 F0 S/ R/ \  W7 i

    s5dm5zqci1e6401596316.png

    s5dm5zqci1e6401596316.png
    6 x2 l3 V! a) d% \

    zbfunpypfnk6401596416.jpg

    zbfunpypfnk6401596416.jpg

    ) F+ d) {5 j9 J. y+ V0 @2 }

    rvq5wosdufi6401596516.gif

    rvq5wosdufi6401596516.gif
    : z" F! j' R" e: ?9 H" L
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    0

    主题

    19

    帖子

    81

    积分

    一级会员

    Rank: 1

    积分
    81
    发表于 2025-3-7 23:12:55 | 显示全部楼层
    学习学习!!!!3 ?3 A. A) b( {6 `* C, k
    回复 支持 反对

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表