MISRA-C是汽車(chē)嵌入式軟件開(kāi)發(fā)中常用的靜態(tài)代碼檢查工具。常用的商用靜態(tài)代碼分析工具,比如QAC、Coverity都支持基于MISRA-C的靜態(tài)代碼檢查。
由于License等等問(wèn)題,通常我們?cè)谝惠嗛_(kāi)發(fā)結(jié)束后進(jìn)行代碼的靜態(tài)檢查,如果可以在開(kāi)發(fā)過(guò)程中能夠直接發(fā)現(xiàn)問(wèn)題,那就方便多了。
本文介紹了基于MISRA-C的代碼靜態(tài)檢查的開(kāi)源解決方案,結(jié)合目前流行的VS Code,實(shí)現(xiàn)在編碼過(guò)程中實(shí)時(shí)地對(duì)代碼進(jìn)行檢查,適合MCAL、BSW開(kāi)發(fā)以及其他需要手寫(xiě)代碼的同學(xué)。
工具安裝Cppcheck工具,在官網(wǎng)下載安裝即可
將Cppcheck安裝路徑加入系統(tǒng)path,否則擴(kuò)展找不到可執(zhí)行文件,會(huì)報(bào)錯(cuò)
VS Code中安裝C/C++ Advanced Lint擴(kuò)展
配置C/C++ Advanced Lint擴(kuò)展
4.1 Cppcheck配置
C/C++ Advanced Lint支持flexelint,lizard,flawfinder,clang,cppcheck多種代碼檢查工具,這里我們只使用Cppcheck,在VS Code的擴(kuò)展設(shè)置里將其他幾種工具的使能勾掉,否則VS Code會(huì)報(bào)錯(cuò)
或者在setting.json中直接配置成false
到這里其實(shí)已經(jīng)可以進(jìn)行代碼的檢查了,如下圖中檢查出數(shù)組越界的錯(cuò)誤,不過(guò)沒(méi)有用MISRA-C規(guī)則檢查
4.2 MISRA-C規(guī)則的配置
我們需要Cppcheck使用MISRA-C規(guī)則檢查代碼,將Cppcheck的addon配置成misra
這樣就可以進(jìn)行基于MISRA-C規(guī)則的靜態(tài)代碼檢查了,下面代碼中檢查出不符合MISRA-C 2012 的 Rule 8.4,Rule 8.2
不過(guò)這樣還不夠方便,我們希望看到Rule 8.4的具體內(nèi)容,這也是本文的重點(diǎn)
找一個(gè)你喜歡的路徑,創(chuàng)建一個(gè)misra.json文件,寫(xiě)入
{"script": "misra.py",
"args": [
"--rule-texts=C:\\MISRA_C_2012.txt"
]
}
misra.py是Cppcheck工具自己帶的腳本,不用關(guān)心,MISRA_C_2012.txt是MISRA-C規(guī)則文本,可以在網(wǎng)上找到。
這里需要注意的是misra.json和MISRA_C_2012.txt兩個(gè)文件都不要放到*:\Program Files\* 路徑下面,會(huì)報(bào)錯(cuò),我這里放到了C盤(pán)的根目錄下面
(這里多提一句,盡量不要把開(kāi)發(fā)用的軟件裝到Program Files路徑下面,會(huì)有莫名其妙的問(wèn)題)
在setting.json中寫(xiě)入下面的內(nèi)容
這樣就可以在VS Code里直接看到MISRA-C規(guī)則的內(nèi)容啦
鼠標(biāo)放到打波浪線的代碼處,也可以有提示
這里有一個(gè)問(wèn)題,就是同一個(gè)條目會(huì)重復(fù)顯示,不過(guò)問(wèn)題也不大
上面的思路來(lái)自于Cppcheck的官方Manual
4.3 提示等級(jí)的選擇
代碼量大了以后,會(huì)檢查出很多information級(jí)別的錯(cuò)誤,通常是MISRA-C中對(duì)代碼風(fēng)格的檢查,而我們通常關(guān)心warning或者error級(jí)別的錯(cuò)誤。VS Code里可以通過(guò)下面的方法選擇錯(cuò)誤提示的級(jí)別
4.4 頭文件的引用
大型工程通常涉及到頭文件的引用,需要添加引用路徑
這里最好在本地的setting.json中配置,因?yàn)椴煌墓こ檀a的引用路徑不同
本次分享到此結(jié)束,有問(wèn)題請(qǐng)各位同學(xué)留言。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧