静态分析工具Cppcheck在Windows上的使用
? ? ? 之前在https://blog.csdn.net/fengbingchun/article/details/8887843 介紹過Cppcheck,那時(shí)還是1.x版本,現(xiàn)在已到2.x版本,這里再總結(jié)下。
? ? ? Cppcheck是一個(gè)用于C/C++代碼的靜態(tài)分析工具,源碼地址為https://github.com/danmar/cppcheck ,最新發(fā)布版本為2.10,License為GPL-3.0.它支持在Windows、Linux、Mac上安裝。
? ? ? Cppcheck提供了獨(dú)特的代碼分析來檢測bugs,并專注于檢測未定義的行為和危險(xiǎn)的編碼結(jié)構(gòu)。它的目標(biāo)是僅檢測代碼中的真正錯(cuò)誤,并生成盡可能少的誤報(bào)。Cppcheck關(guān)注bug而不是代碼風(fēng)格。
? ? ? 靜態(tài)分析是一個(gè)非常大的領(lǐng)域,Cppcheck只涵蓋了其中的一部分。沒有一種工具能覆蓋整個(gè)領(lǐng)域。每個(gè)工具都有獨(dú)特的代碼分析,使用一組工具比使用一種工具要好,是很好的補(bǔ)充。
? ? ? 未定義的行為(undefined behaviour)包括:
? ? ? (1).dead pointers;
? ? ? (2).除以0;
? ? ? (3).整數(shù)溢出;
? ? ? (4).無效的位移操作;
? ? ? (5).無效的轉(zhuǎn)換;
? ? ? (6).STL的用法無效;
? ? ? (7).內(nèi)存管理;
? ? ? (8).空指針解引用;
? ? ? (9).越界檢查;
? ? ? (10).未初始化的變量;
? ? ? (11).寫const數(shù)據(jù);
? ? ? 安裝:從https://github.com/danmar/cppcheck/releases/tag/2.10 下載cppcheck-2.10-x64-Setup.msi,雙擊進(jìn)行安裝,并將安裝路徑即cppcheck.exe所在路徑加入到系統(tǒng)環(huán)境變量中。
? ? ? 結(jié)果消息(messages)包括:
? ? ? (1).error: 執(zhí)行代碼時(shí)未定義的行為或其它錯(cuò)誤,如內(nèi)存泄漏;
? ? ? (2).warning: 執(zhí)行代碼時(shí)可能存在未定義的行為;
? ? ? (3).style: 風(fēng)格問題,例如未使用的函數(shù)、冗余代碼、constness、運(yùn)算符優(yōu)先級、可能的錯(cuò)誤;
? ? ? (4).performance: 基于常識(common knowledge)的運(yùn)行時(shí)性能建議;
? ? ? (5).portability: 可移植性警告;
? ? ? (6).information: 配置問題,與語法正確性無關(guān).
? ? ? 注意事項(xiàng):
? ? ? (1).通過執(zhí)行cppcheck.exe --help 可查看支持哪些輸入?yún)?shù);
? ? ? (2).語法: cppcheck.exe [options] [files or paths]
? ? ? (3).--file-filter=<str>: 設(shè)置文件過濾器,并且僅檢查與過濾器匹配的文件;如--file-filter=*bar.cpp 只分析以bar.cpp結(jié)尾的文件;
? ? ? (4).--cppcheck-build-dir=<dir>: Cppcheck將分析信息保存在該文件夾中,推薦使用.優(yōu)點(diǎn):加快分析速度,使增量分析成為可能;使用多個(gè)線程時(shí)也可以進(jìn)行全程序(whole program)分析;
? ? ? (5).--enable=<id>: id可為all, warning, style, performance, portability, information, missingInclude; all啟用所有檢查,當(dāng)掃描整個(gè)程序時(shí),建議只使用all,因?yàn)檫@會(huì)啟用unusedFunction;可以指定多個(gè)id,用逗號分開;
? ? ? (6).--file-list=<file>: 在文本文件中指定要check的文件;
? ? ? (7).-I <dir>: 給出搜索include文件的路徑,可有多個(gè)-I;
? ? ? (8).--include=<file>: 在checked文件之前強(qiáng)制include一個(gè)文件;
? ? ? (9).--output-file=<file>: 將結(jié)果寫入文件;
? ? ? (10).-v或--verbose: 輸出更詳細(xì)的錯(cuò)誤信息.
? ? ? 這里使用GitHub Messy_Test/demo/Messy_Test?中的代碼進(jìn)行測試,執(zhí)行命令如下所示:
? ? ? 在當(dāng)前的results目錄生成一些文件,打開其中的result.txt,內(nèi)容如下:對有問題的代碼行給出原因說明
?
? ? ? GitHub:?https://github.com/fengbingchun/Messy_Test
總結(jié)
以上是生活随笔為你收集整理的静态分析工具Cppcheck在Windows上的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OTRS安装ITSM组件
- 下一篇: java信息管理系统总结_java实现科