MISRA-C是汽車嵌入式軟件開發(fā)中常用的靜態(tài)代碼檢查工具。常用的商用靜態(tài)代碼分析工具,比如QAC、Coverity都支持基于MISRA-C的靜態(tài)代碼檢查。
由于License等等問題,通常我們在一輪開發(fā)結束后進行代碼的靜態(tài)檢查,如果可以在開發(fā)過程中能夠直接發(fā)現問題,那就方便多了。
本文介紹了基于MISRA-C的代碼靜態(tài)檢查的開源解決方案,結合目前流行的VS Code,實現在編碼過程中實時地對代碼進行檢查,適合MCAL、BSW開發(fā)以及其他需要手寫代碼的同學。
工具安裝Cppcheck工具,在官網下載安裝即可
將Cppcheck安裝路徑加入系統path,否則擴展找不到可執(zhí)行文件,會報錯
VS Code中安裝C/C++ Advanced Lint擴展
配置C/C++ Advanced Lint擴展
4.1 Cppcheck配置
C/C++ Advanced Lint支持flexelint,lizard,flawfinder,clang,cppcheck多種代碼檢查工具,這里我們只使用Cppcheck,在VS Code的擴展設置里將其他幾種工具的使能勾掉,否則VS Code會報錯
或者在setting.json中直接配置成false
到這里其實已經可以進行代碼的檢查了,如下圖中檢查出數組越界的錯誤,不過沒有用MISRA-C規(guī)則檢查
4.2 MISRA-C規(guī)則的配置
我們需要Cppcheck使用MISRA-C規(guī)則檢查代碼,將Cppcheck的addon配置成misra
這樣就可以進行基于MISRA-C規(guī)則的靜態(tài)代碼檢查了,下面代碼中檢查出不符合MISRA-C 2012 的 Rule 8.4,Rule 8.2
不過這樣還不夠方便,我們希望看到Rule 8.4的具體內容,這也是本文的重點
找一個你喜歡的路徑,創(chuàng)建一個misra.json文件,寫入
{"script": "misra.py",
"args": [
"--rule-texts=C:\\MISRA_C_2012.txt"
]
}misra.py是Cppcheck工具自己帶的腳本,不用關心,MISRA_C_2012.txt是MISRA-C規(guī)則文本,可以在網上找到。
這里需要注意的是misra.json和MISRA_C_2012.txt兩個文件都不要放到*:\Program Files\* 路徑下面,會報錯,我這里放到了C盤的根目錄下面
(這里多提一句,盡量不要把開發(fā)用的軟件裝到Program Files路徑下面,會有莫名其妙的問題)
在setting.json中寫入下面的內容
這樣就可以在VS Code里直接看到MISRA-C規(guī)則的內容啦
鼠標放到打波浪線的代碼處,也可以有提示
這里有一個問題,就是同一個條目會重復顯示,不過問題也不大
上面的思路來自于Cppcheck的官方Manual
4.3 提示等級的選擇
代碼量大了以后,會檢查出很多information級別的錯誤,通常是MISRA-C中對代碼風格的檢查,而我們通常關心warning或者error級別的錯誤。VS Code里可以通過下面的方法選擇錯誤提示的級別
4.4 頭文件的引用
大型工程通常涉及到頭文件的引用,需要添加引用路徑
這里最好在本地的setting.json中配置,因為不同的工程代碼的引用路徑不同
本次分享到此結束,有問題請各位同學留言。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站題目:基于MISRA-C和VSCode的代碼靜態(tài)檢查的開源解決方案-創(chuàng)新互聯
分享地址:http://chinadenli.net/article38/cdocpp.html
成都網站建設公司_創(chuàng)新互聯,為您提供小程序開發(fā)、外貿建站、動態(tài)網站、網站制作、網站策劃、網站維護
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯