精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

靜態分析工具Clang Static Analyzer (3) Cppcheck

系統 OpenHarmony
Cppcheck 是 C/C++ 代碼的靜態分析工具。它提供獨特的代碼分析技術來檢測缺陷,不檢查代碼中的語法錯誤,只檢查編譯器檢查不出來的缺陷,并專注于檢測未定義行為錯誤和危險的編碼結構。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

前文介紹CodeChecker時,使用到了Cppcheck,我們來看看這個工具是什么,如何使用。

1、Cppcheck介紹

Cppcheck 是 C/C++ 代碼的靜態分析工具。它提供獨特的代碼分析技術來檢測缺陷,不檢查代碼中的語法錯誤,只檢查編譯器檢查不出來的缺陷,并專注于檢測未定義行為錯誤和危險的編碼結構。其目標是減少誤報、零誤報,檢查代碼中真正的錯誤。Cppcheck旨在能夠分析C / C++代碼,即使它具有非標準語法(在嵌入式項目中很常見)。

Cppcheck既有開源版本,也有具有擴展的功能和支持的Cppcheck Premium版本,。可以訪問 www.cppchecksolutions.com 以獲取商業版本的更多信息和購買選項。

(1)Cppcheck功能特性

  • 獨特的代碼分析,可檢測代碼中的各種錯誤。
  • 命令行界面和圖形用戶界面都可用。
  • Cppcheck非常注重檢測未定義的行為。

(2)Cppcheck特有的分析技術

使用多個靜態分析工具可能是一個好主意,每個工具都有獨特的功能特性。這在研究中已經證實。那么Cppcheck的獨特之處在哪里?

Cppcheck使用不健全的流程敏感分析,其他幾種分析器使用基于抽象解釋的路徑敏感分析,這也很好,但既有優點也有缺點。從理論上講,根據定義,路徑敏感分析比流量敏感分析更好。但實際上,這意味著Cppcheck將檢測其他工具無法檢測到的錯誤。在Cppcheck中,數據流分析不僅是“前向”的,而且是“雙向的”。大多數分析器會診斷這一點,可以確定數組索引為 1000 時會出現溢出。

void foo(int x)
{
int buf[10];
if (x == 1000)
buf[x] = 0; // <- ERROR
}

Cppcheck還將診斷此問題,當x等于1000時,賦值時也會出現數組越界。

void foo(int x)
{
int buf[10];
buf[x] = 0; // <- ERROR
if (x == 1000) {}
}

(3)未定義行為Undefined behaviour

  • Dead pointers 死指針
  • Division by zero 除以零
  • Integer overflows整數溢出
  • Invalid bit shift operands無效的位移操作數
  • Invalid conversions無效轉化
  • Invalid usage of STLSTL 的用法無效
  • Memory management內存管理
  • Null pointer dereferences空指針解引用
  • Out of bounds checking越界檢查
  • Uninitialized variables未初始化的變量
  • Writing const data寫入常量數據

2、Cppcheck安裝

Cppcheck也可以從各種包管理器安裝;但是,您可能會得到一個過時的版本。為了獲取更新版本,可以訪問https://github.com/danmar/cppcheck進行源碼安裝。

  • Debian:
sudo apt-get install cppcheck
  • Fedora:
sudo yum install cppcheck
  • macOS:
brew install cppcheck

3、使用入門

第一個測試程序,這里有一段簡單的代碼,我們命名為file1.c。

int main()
{
char a[10];
a[10] = 0;
return 0;
}

執行cppcheck file1.c,輸出如下:

zhushangyuan@DESKTOP-RPE9R4O:~/CSA$ cppcheck file1.c
Checking file1.c ...
[file1.c:4]: (error) Array 'a[10]' accessed at index 10, which is out of bounds.

我們再試試上面說的例子,保存到file2.c。

void foo(int x)
{
int buf[10];
buf[x] = 0; // <- ERROR 1
if (x == 1000) {
buf[x] = 0; // <- ERROR 2
}
}

執行cppcheck --enable=all file2.c,輸出如下。可以看得出有2個warning和3個style問題。

zhushangyuan@DESKTOP-RPE9R4O:~/CSA$ cppcheck --enable=all file2.c
Checking file2.c ...
file2.c:4:6: warning: Either the condition 'x==1000' is redundant or the array 'buf[10]' is accessed at index 1000, which is out of bounds. [arrayIndexOutOfBoundsCond]
buf[x] = 0; // <- ERROR 1
^
file2.c:5:9: note: Assuming that condition 'x==1000' is not redundant
if (x == 1000) {
^
file2.c:4:6: note: Array index out of bounds
buf[x] = 0; // <- ERROR 1
^
file2.c:6:8: warning: Either the condition 'x==1000' is redundant or the array 'buf[10]' is accessed at index 1000, which is out of bounds. [arrayIndexOutOfBoundsCond]
buf[x] = 0; // <- ERROR 2
^
file2.c:5:9: note: Assuming that condition 'x==1000' is not redundant
if (x == 1000) {
^
file2.c:6:8: note: Array index out of bounds
buf[x] = 0; // <- ERROR 2
^
file2.c:4:10: style: Variable 'buf[x]' is assigned a value that is never used. [unreadVariable]
buf[x] = 0; // <- ERROR 1
^
file2.c:6:12: style: Variable 'buf[x]' is assigned a value that is never used. [unreadVariable]
buf[x] = 0; // <- ERROR 2
^
file2.c:1:0: style: The function 'foo' is never used. [unusedFunction]

^

(1)檢查文件夾

Cppcheck支持檢查文件夾中的所有文件。通常一個項目會有許多源文件,如果需要同時檢查,Cppcheck 可以檢查文件夾中的所有文件.如果 path 是一個文件夾,cppcheck 將遞歸檢查這個文件夾中的所有源文件。

cppcheck path

示例輸出如下:

zhushangyuan@DESKTOP-RPE9R4O:~/CSA$ cppcheck .
Checking file1.c ...
file1.c:4:4: error: Array 'a[10]' accessed at index 10, which is out of bounds. [arrayIndexOutOfBounds]
a[10] = 0;
^
1/4 files checked 12% done
Checking file2.c ...
2/4 files checked 38% done
Checking hello.c ...
hello.c:2:13: error: Division by zero. [zerodiv]
int x = 7 / 0; // bug here
^
3/4 files checked 50% done
Checking simple.c ...
simple.c:16:11: error: Division by zero. [zerodiv]
return 5/(x-x); // warn
^
simple.c:12:5: error: Uninitialized variable: s [uninitvar]
f(s); // warn
^
simple.c:12:5: error: Uninitialized struct member: s.x [uninitStructMember]
f(s); // warn
^
4/4 files checked 100% done

(2)手動檢查文件或使用項目文件

使用 Cppcheck 可以手動檢查文件,通過指定文件/文件夾來檢查和設置,或者可以使用一個工程文件(cmake/visual studio)。

使用項目文件更快,因為它只需要非常少的配置。

手動檢查文件可以更好的控制分析。

不一定哪種方法會有最好的結果,建議嘗試一下,可能會得到不同的結果,發現大多數 bug 需要使用這兩種方法。

4、嚴重級別Severities

輸出信息中的嚴重級別支持如下幾種:

  • error 錯誤
    when code is executed there is either undefined behavior or other error, such as
    a memory leak or resource leak。發現未定義行為或其他錯誤,例如內存泄露、資源泄露
  • warning告警
    when code is executed there might be undefined behavior可能有未定義行為
  • style樣式風格
    stylistic issues, such as unused functions, redundant code, constness, operator
    precedence, possible mistakes.樣式問題,例如未使用行數,冗余代碼,常量性,操作符優先級,可能的錯誤等
  • performance性能
    run time performance suggestions based on common knowledge, though it is
    not certain any measurable speed difference will be achieved by fixing these
    messages.這些建議只是基于常識,即使修復這些消息,也不確定會得到任何可測量的性能提升。
  • portability可移植性
    portability warnings. Implementation defined behavior. 64-bit portability. Some
    undefined behavior that probably works “as you want”, etc.可移植性警告。64 位的可移植性,代碼可能在不同的編譯器中運行結果不同。
  • information信息
    configuration problems, which does not relate to the syntactical correctness, but
    the used Cppcheck configuration could be improved.配置問題,建議在配置期間僅啟用這些

(1)啟用消息

默認情況下,只顯示錯誤消息,可以通過 --enable 命令啟用更多檢查。

  • 啟用警告消息:
cppcheck --enable=warning file.c
  • 啟用性能消息:
cppcheck --enable=performance file.c
  • 啟用信息消息:
cppcheck --enable=information file.c

由于歷史原因 --enable=style 可以啟用警告、性能、可移植性和樣式信息。當使用舊 XML 格式時,這些都由 style 表示:

cppcheck --enable=style file.c
  • 啟用警告和性能消息:
cppcheck --enable=warning,performance file.c
  • 啟用 unusedFunction 檢查。這不能通過 --enable=style 啟用,因為不會在庫中正常工作。
cppcheck --enable=unusedFunction file.c
  • 啟用所有消息:
cppcheck --enable=all

5、常見錯誤修改

  • 隱式構造問題。

示例: (style) Class ‘Slice’ has a constructor with 1 argument that is not explicit。

解決方法:在Slice構造函數前加上explicit,使其必須顯示構造,當然這種有時并非必須顯示構造。

  • 變量未初始化問題。

示例:(warning) Member variable ‘TableFileCreationInfo::file_size’ is not initialized in the constructor.

解決方法:在構造函數中加入變量初始值。

  • 變量/函數未使用問題。

示例:(style) Unused variable: output。

示例:(style) The function ‘rocksmt_wal_iter_status’ is never used。

解決方法:考慮后期是否還需要,不需要的及時刪除,需要的保留。

  • raw loop問題。

示例:(style) Consider using std::fill algorithm instead of a raw loop. [useStlAlgorithm]。

示例:(style) Consider using std::transform algorithm instead of a raw loop. [useStlAlgorithm]。

解決辦法:將循環便利替換為STL標準庫算法函數。

  • 引用傳遞問題。

示例:(performance) Function parameter ‘f’ should be passed by reference.

解決辦法:在聲明function時,能用引用傳遞的盡量使用引用傳遞,盡量避免值傳遞。

  • const參數問題。

示例:(performance) Function parameter ‘s’ should be passed by const reference. [passedByValue]。

解決辦法:形參s前加上const,在函數中未被修改的變量,盡量聲明為const。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-12-13 15:42:56

Clang-Tidy靜態分析工具

2022-12-12 16:11:47

Clang-Tidy工具

2022-12-08 15:25:10

Clang分析工具CSA

2011-04-11 13:58:09

TCP

2021-06-08 13:56:34

工具靜態代碼

2017-04-19 12:05:59

2021-07-29 06:37:55

KubernetesKubeLinter工具

2016-05-17 13:54:05

2010-08-20 15:07:22

浮動靜態路由

2016-03-29 14:54:36

2021-12-27 11:11:30

LLVMSPIR-V后端

2012-05-22 00:28:21

JavaJava開源開源工具

2017-05-10 14:27:29

靜態代碼漏洞安全

2013-10-31 11:08:15

2021-01-04 07:57:07

C++工具代碼

2020-12-22 08:00:00

開發分析工具

2021-01-05 09:25:27

DockerSemgrep代碼靜態分析工具

2024-01-08 13:47:00

代碼分析工具

2009-11-27 15:13:00

PHP靜態變量stat
點贊
收藏

51CTO技術棧公眾號

粉嫩13p一区二区三区| 欧美黄在线观看| 欧美日韩激情在线| 97超碰人人爱| 青青草免费在线视频| 日本欧美一区二区| 不卡av电影院| 波多野结衣a v在线| 91精品麻豆| 欧美性xxxxxx| 五月天激情图片| 国产在线一二三区| 成人污视频在线观看| 国产精品爱啪在线线免费观看| 欧美黄片一区二区三区| 亚洲男人都懂第一日本| 日韩亚洲欧美在线观看| 无码人妻丰满熟妇区毛片| 中日韩高清电影网| 欧美极品少妇xxxxⅹ高跟鞋| 成人自拍偷拍| 国产精品久久久久久免费免熟 | 日本成人看片网址| 久久黄色小视频| 久久麻豆精品| 亚洲精品中文字| 不卡的一区二区| 亚洲人成777| 日本高清无吗v一区| 欧美交换配乱吟粗大25p| 国产对白叫床清晰在线播放| 成人av手机在线观看| 成人午夜在线视频一区| 波多野结衣一区二区三区在线 | 欧美大胆a视频| 又色又爽的视频| 九九热线有精品视频99| 亚洲第一精品福利| 亚洲最大视频网| 精品三级国产| 91麻豆精品国产| 亚洲精品性视频| 日本午夜免费一区二区| 欧美自拍偷拍午夜视频| 免费观看精品视频| 无码小电影在线观看网站免费| 夜夜嗨av一区二区三区网页| 国产日韩视频在线播放| 毛片av在线| 国产精品国产三级国产三级人妇| 手机成人在线| av大全在线免费看| 国产精品网站导航| 午夜精品一区二区三区四区 | 中文字幕一区二区三区四区| 亚洲午夜精品一区二区| wwwww在线观看免费视频| 中国av一区二区三区| 神马影院午夜我不卡| av大片在线观看| 中文字幕一区二区三区视频| 中文视频一区视频二区视频三区| 免费在线午夜视频| 最新国产精品久久精品| 国产经典久久久| xxx.xxx欧美| 天天色天天操综合| 成年人视频观看| 精品免费av在线| 欧美日韩电影在线播放| 久久久久亚洲av片无码v| 91精品日本| 亚洲精品一二区| 国产又黄又粗视频| 91精品国产自产在线观看永久∴ | 97av中文字幕| heyzo中文字幕在线| 欧美日韩一区二区精品| 国产天堂在线播放| 电影91久久久| 亚洲国产欧美一区二区三区久久| www.久久av| 久久久久久影院| 国语自产精品视频在线看| 婷婷激情五月网| 久久国产免费看| 亚洲专区国产精品| 亚洲AV第二区国产精品| 中文字幕av一区二区三区免费看| 日本福利视频在线观看| 欧美gay视频| 日韩欧美二区三区| 色一情一交一乱一区二区三区| 99tv成人| 91精品国产91久久| 国产一区二区三区中文字幕| 丁香婷婷深情五月亚洲| 日韩欧美在线观看强乱免费| 蜜桃av在线免费观看| 午夜亚洲福利老司机| 日本久久精品一区二区| 成人看片爽爽爽| 最新日韩中文字幕| 国产又色又爽又黄的| 久88久久88久久久| 裸体丰满少妇做受久久99精品| 日本不卡在线| 欧美日韩在线看| 9191在线视频| 色婷婷亚洲mv天堂mv在影片| 国模视频一区二区| 国产同性人妖ts口直男| 久久久久综合网| 成人黄色大片网站| 国产精品日韩精品在线播放 | 青草av在线| 精品视频一区 二区 三区| 久久精品aⅴ无码中文字字幕重口| 激情五月综合| 日本久久久久亚洲中字幕| 国产夫绿帽单男3p精品视频| 国产欧美久久久精品影院| 欧美日韩精品在线一区二区| 亚洲欧美综合久久久久久v动漫| 亚洲精选中文字幕| 日韩精品乱码久久久久久| 国产一区欧美日韩| 亚洲亚洲精品三区日韩精品在线视频| 在线成人av观看| 亚洲高清久久久久久| 我要看黄色一级片| 麻豆精品在线播放| 亚洲成色www久久网站| 美女福利一区二区| 亚洲深夜福利在线| 免费看日批视频| 成人ar影院免费观看视频| 成年在线观看视频| 日韩成人在线观看视频| 成人444kkkk在线观看| 一卡二卡三卡在线| 国产精品国产三级国产三级人妇 | 99riav久久精品riav| 97干在线视频| 国产精品qvod| 午夜精品一区二区三区在线播放| 亚洲欧美另类视频| 亚洲成av人片在线| 国产一级二级在线观看| 在线亚洲自拍| 欧美12av| 日韩av首页| 最近中文字幕日韩精品| 国产精品高潮呻吟久久久| 亚洲色图制服丝袜| 香蕉视频在线观看黄| 红桃视频国产一区| 精品在线视频一区二区| 国产精品一区二区av影院萌芽| 精品调教chinesegay| 在线永久看片免费的视频| 国产日本亚洲高清| 亚洲一区二区福利视频| 欧美成人嫩草网站| 国产三区二区一区久久| 美女av在线免费看| 亚洲欧美激情在线视频| 中文字幕 自拍偷拍| ●精品国产综合乱码久久久久| 污免费在线观看| 亚洲国内欧美| 欧美三级电影在线播放| 成人国产一区二区三区精品麻豆| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 91在线视频精品| 国产丝袜在线观看视频| 日韩h在线观看| 中文在线免费看视频| 一区二区三区中文字幕精品精品| 水蜜桃av无码| 欧美a一区二区| 女人色极品影院| 免费成人结看片| 96精品久久久久中文字幕| www.综合网.com| 一区三区二区视频| 亚洲av无码一区二区乱子伦| 岛国精品视频在线播放| 日本伦理一区二区三区| 国产99一区视频免费| 国产一区亚洲二区三区| 一区二区电影| 欧美日韩国产免费一区二区三区| 亚洲综合资源| 51午夜精品视频| a篇片在线观看网站| 亚洲欧美日韩中文在线| 国产美女永久免费| 色婷婷av一区二区三区大白胸| 日本在线一级片| 国产免费观看久久| 日本久久久久久久久久| 理论片日本一区| 中文字幕无码精品亚洲35| 成人写真视频| 久久久影院一区二区三区| 亚洲欧美专区| 日本伊人精品一区二区三区介绍| 亚洲区欧洲区| 日韩一区二区三区在线播放| 天天操天天射天天| 日韩精品在线一区| 97精品人妻一区二区三区在线| 色偷偷久久人人79超碰人人澡| 久久av高潮av无码av喷吹| 国产欧美视频在线观看| 女同性恋一区二区三区| 亚洲综合影院| 色综合久久悠悠| 国产福利在线看| 亚洲第一免费网站| 国产99对白在线播放| 欧美三级中文字幕在线观看| 国产成人精品一区二三区| 亚洲欧美欧美一区二区三区| 欧美丰满美乳xxⅹ高潮www| 成人夜色视频网站在线观看| 黄色片免费网址| 久久av老司机精品网站导航| 蜜臀久久99精品久久久酒店新书| 亚洲电影av| 国产成人一区二区三区别| 亚洲成人精选| 亚洲图片都市激情| 成人羞羞视频在线看网址| 欧美日韩综合精品| 国产欧美一区| 日韩免费三级| av一区二区在线播放| 欧美黄色直播| 奇米狠狠一区二区三区| 精品一区二区三区自拍图片区 | 91九色国产社区在线观看| 成人综合网站| 国产精品人人做人人爽| 欧美日韩五区| 国产在线播放91| 97久久中文字幕| 2020国产精品久久精品不卡| 一区二区三区| 成人18视频| 欧美a一欧美| 农村寡妇一区二区三区| 精品国产美女| 亚洲一区二区三区加勒比| 久久中文字幕av一区二区不卡| 中文字幕欧美人与畜| 91精品国产成人观看| 奇米777四色影视在线看| 韩日成人av| 欧美国产激情视频| 日韩高清欧美激情| 欧美连裤袜在线视频| 奇米一区二区| 国产精品欧美久久| 欧美精品密入口播放| 久久99精品久久久久久水蜜桃| 亚洲精品蜜桃乱晃| 99久久久久国产精品免费| 极品尤物一区| 欧美成人蜜桃| 99久久久久国产精品| 玖玖精品在线视频| 狂野欧美激情性xxxx欧美| 粉嫩av一区二区三区在线播放| 一区二区在线免费看| 国产精品亚洲成人| 老鸭窝一区二区| 国产精品你懂的在线欣赏| 69xx绿帽三人行| 天天影视网天天综合色在线播放| 999视频在线| 欧美一区二区福利在线| 天天操天天舔天天干| 最近2019中文字幕一页二页 | 国产91高潮流白浆在线麻豆 | a在线观看免费| 亚洲精品在线三区| 国产黄在线看| 色综合久久中文字幕综合网小说| 天堂资源在线| 亚洲一区中文字幕| 神马电影久久| 艳母动漫在线观看| 性娇小13――14欧美| 永久免费黄色片| 国产视频视频一区| 久久网免费视频| 欧洲激情一区二区| 农村少妇久久久久久久| 在线精品国产欧美| sm性调教片在线观看 | 在线观看中文字幕av| 精品国产自在久精品国产| av成人手机在线| 91国偷自产一区二区三区的观看方式| 欧美aaaaaaaa| 欧美精品123| 狠狠88综合久久久久综合网| 性刺激的欧美三级视频| 99久久综合国产精品| 日韩在线不卡av| 91成人网在线| 色网站在线免费观看| 欧美日本中文字幕| 国外成人福利视频| 日本黑人久久| 亚洲激情社区| 在线视频日韩欧美| 国产精品久久久久四虎| 亚洲不卡在线视频| 日韩经典一区二区三区| 成全电影大全在线观看| 91情侣在线视频| 91精品亚洲| 中文字幕av不卡在线| 久久久久久夜精品精品免费| 精品91久久久| 欧美精品一区二区三区在线播放| 成人免费网站在线观看视频| 国产欧美一区二区| 精品久久影视| 男女啪啪网站视频| 久久久www免费人成精品| 国产精品变态另类虐交| 日韩精品专区在线| 亚洲小说区图片| 91成人免费视频| 国产成人1区| 麻豆传传媒久久久爱| www一区二区| 日日夜夜狠狠操| 中文字幕欧美日韩精品| 国产亚洲一区二区手机在线观看| 欧美另类一区| 日本免费在线视频不卡一不卡二| 99精品欧美一区二区| 精品视频一区二区不卡| 免费av在线播放| 91成人免费看| 亚洲毛片视频| 亚洲精品乱码久久久久久久| 欧美丝袜美女中出在线| 人成在线免费视频| 国产精品久久久久久久久久久不卡| 久草成人在线| 污污网站免费观看| 亚洲男同性视频| 免费观看毛片网站| 26uuu日韩精品一区二区| 蜜臀91精品国产高清在线观看| 国产精品免费观看久久| 欧美激情一区三区| 国产精品主播一区二区| 欧美日韩成人在线播放| 红杏视频成人| 热久久精品免费视频| 亚洲欧美综合网| 免费观看a视频| 国产精品v日韩精品| 亚洲九九在线| 欧美深性狂猛ⅹxxx深喉| 91官网在线观看| 国产在线69| 国产青春久久久国产毛片| 久久青草久久| 性色av无码久久一区二区三区| 欧美精品一区二区三区蜜桃视频| 成人小电影网站| 欧美 日韩 国产 在线观看| 成人黄页在线观看| 国产精品无码粉嫩小泬| 欧美另类在线观看| 欧美禁忌电影网| 精品欧美一区二区三区| 欧美女子与性| 成人黄色在线播放| 在线亚洲精品| 国产精品白丝喷水在线观看| 欧美精品一卡| 国产系列第一页| 不卡视频一二三| 中文字幕在线观看欧美| 欧美日韩高清在线观看| 国产精品探花在线观看| 亚洲精品鲁一鲁一区二区三区| 91福利在线观看| а√在线中文网新版地址在线| 亚洲资源在线网| 91婷婷韩国欧美一区二区|