电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

989

主题

989

帖子

8575

积分

高级会员

Rank: 5Rank: 5

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

kmyfksdmjvn6401594914.gif

kmyfksdmjvn6401594914.gif
' n6 {# a# S3 B7 @
点击上方蓝色字体,关注我们3 S0 f: Q! v. }5 N

3 t) M% h4 K) U) B, q
: f; q: ~( T6 \5 y/ q2 |; k我之前团队习惯使用QAC这款强大的静态分析工具。 然而,QAC 是一款付费软件,让许多普通规模的汽车相关企业,尤其是初创型公司或是预算有限的中小企业望而却步。  @; k- g! [( y4 k0 @( z- o" P% B
. Y. N6 ^9 i; a* Q' Z
在没有充足资金投入购买此类工具的情况下,难道就只能放弃高效的静态检查了吗?实则不然。$ S7 Z. c( D& e% B9 R
6 i' D6 {' n5 v
在此,强烈推荐使用 Cppcheck 这款开源免费的静态代码分析工具。7 u" ^& j" {; G, y0 k

# j, c  f+ g+ x0 V' d

hofspzxwodu6401595015.png

hofspzxwodu6401595015.png
* }; L$ L/ N8 ?! E

( U2 w9 |; z/ v  ACppcheck 拥有诸多优势,一方面,它支持对 C 和 C++ 代码进行广泛且细致的检查,无论是常见的空指针引用、数组越界、内存泄漏等经典错误,还是较为隐晦的未初始化变量使用、逻辑运算优先级混淆等问题,都能被有效识别。' Y$ y, A2 N' R8 y. C, L  I
& o: D% B7 d9 C/ k, j/ |" J
另一方面,它具有出色的跨平台特性,无论是 Windows、Linux 还是 Mac 系统,都能无缝适配,这对于汽车嵌入式开发中多样的开发环境来说极为便利。5 p  N& w& y. V& ?
& K* V, ?% {  u1 r4 [5 N

glzholkjvsh6401595115.png

glzholkjvsh6401595115.png

" C) v( G2 Q1 m, z+ t0 D' M
2 |) F( ~/ x- a6 E' S' O! b7 H: \6 S* R下载链接:https://cppcheck.sourceforge.io/ * x( l( |5 F3 _! y( [& W: h

) p: A" t) K; O! k% e5 P; { 这里我使用的是Windows版本安装完成后,效果如下:
, w6 x' ^% b' c/ l. F% j; m( ~/ A; F. v7 F

qhxaoj3lps56401595215.png

qhxaoj3lps56401595215.png
# H# e. y7 Z" G8 x

' p& T3 [# O7 f: L- ?+ i( jCppcheck的使用比较简单,主要分为两步,一是整理好需要检查的软件代码工程;二是使用Cppcheck进行检查。+ s- p5 ?) U, n: D6 o' \# y
1/ N, C9 u1 J) {& v% p) W; e
整理代码工程9 ?2 K# N) G7 p  ], W
拷贝一份代码工程用于做静态检查,整理代码工程只需要保留软件工程中的所有头文件和源文件,其他的编译文件、配置文件等,全部删除就可以。
  [6 A9 k% D" m3 @* E% P8 V) Z( s! [: n5 [! m& t
原工程如下:8 e, n0 {3 t5 }
# g3 [; x: H# L; N

dtcgasxahm06401595315.png

dtcgasxahm06401595315.png
5 ]' U. a, R5 B5 u. f1 U6 @
0 N. N7 \4 h1 M! r% O* z' a
整理后效果如下:
' ~. |& D5 }. r
( G, C6 A( Q8 M) [

j1qeof1rsg26401595415.png

j1qeof1rsg26401595415.png

# i1 e# N1 ?) y4 [' I$ n2
4 T+ ?; [9 R. P" g/ a9 B静态检查
! T' d5 A9 H4 A4 r8 X% y) q静态检查前,需要将Cppcheck软件的检查设置修改成我们预期的检查项,以下是我的静态检查设置:
. [, _0 D$ d6 d, H) ]  ]9 Y) @1 [- j7 C8 f% g

zvdmsowfw036401595515.png

zvdmsowfw036401595515.png

" E: V- ]: m- [* C
8 V" G  l" ]0 l/ Y' m8 s2 M, Z

u4p4giteu356401595615.png

u4p4giteu356401595615.png
* j; e- C% u7 }; P5 b. e

, \% d" x6 I' Q6 \) k点击分析,选择目录,加载需要静态检查的软件工程: 8 K% w' U3 N' M7 S. y  X$ I

4 m) t( I/ Q+ L. e

i4ntzsvzbwi6401595715.png

i4ntzsvzbwi6401595715.png
: j+ T" c& E* R; K* s1 U, @

- n" h$ M& c, |导入软件工程后,立刻会开始静态检查:
- x* z; k4 G9 b7 R5 C
( O- {. q# M$ R; N3 h

suf1vryrfmd6401595815.png

suf1vryrfmd6401595815.png

* A8 L+ }/ P* I% g5 o: [9 U2 x& |% L  }! p$ U" ]1 F
静态检查后可以看到有问题文件的说明,结果如下:
8 W( P4 h5 o2 z- i0 M7 b9 F( R
# a" N0 S* E+ Q0 K7 f7 t9 W0 y% N

51hli3wwwrd6401595915.png

51hli3wwwrd6401595915.png
& n: \1 K3 E9 a9 _5 {

# {! x" w7 g% G  M也可以设置过滤,查看不同等级的静态检查结果。 3 ~: i9 S8 u4 U. I1 @

  t8 l. m$ J- F5 B; W

kogyqvsg2ta6401596016.png

kogyqvsg2ta6401596016.png

! l0 T2 y) d/ V2 B- O; J3 E2 j3 n% f, U
最后,可以在统计中查看检查结果汇总。- ?# |# Y3 C) L. m+ w& j% h
) Y  t! z3 F# l# B. g

vgejozbbxun6401596116.png

vgejozbbxun6401596116.png

7 W8 K5 p( W2 m& l3 E/ J% f- j
2 o) P% ^& Q* T7 H% ]0 Z. M3 F( y1 ]可以将结果导出成PDF文件。
3 N4 y6 e# C! O9 J) X) u9 q7 z; [) a+ a7 t6 |& Y0 n

xgjuypcptau6401596216.png

xgjuypcptau6401596216.png
) f! y* X7 [; x6 Y4 `
/ Y# ~% H2 q1 m4 c6 i
结果参数说明如下:
. _2 F# [; s" U. ]- L; c7 `) f
  • error:指代代码里存在的错误项,像内存泄漏这类情况。
  • warning:给出的编程改进意见,目的在于避免产生 bug。
  • style:涉及编码风格相关内容,会提示哪些函数未被使用以及多余代码等情况。
  • portability:提示在跨平台时容易出现的一些问题。
  • performance:表明该部分代码具备可优化的空间。
  • information:属于其他信息,可予以忽略。. B6 I# [) D0 t1 X" e+ @
    静态检查结果PDF如下:
    8 H8 g* q6 Q" ^! E( M+ H7 p

    s5dm5zqci1e6401596316.png

    s5dm5zqci1e6401596316.png

    ! A/ {3 s5 w8 I; m2 l; P

    zbfunpypfnk6401596416.jpg

    zbfunpypfnk6401596416.jpg

    6 e( j' f: l. D; A$ t6 j  F: N; n# b

    rvq5wosdufi6401596516.gif

    rvq5wosdufi6401596516.gif

    / ]0 l  Z  U: z点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    0

    主题

    19

    帖子

    81

    积分

    一级会员

    Rank: 1

    积分
    81
    发表于 2025-3-7 23:12:55 | 显示全部楼层
    学习学习!!!!, e5 c* O/ z" y0 s" O
    回复 支持 反对

    使用道具 举报

    发表回复

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

    本版积分规则


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