用于C/C++靜態(tài)分析的Visual Studio代碼擴展入門
在此文章中,我將與您分享一些有關為Visual Studio Code編輯器配置和使用我們全新的C/C++test靜態(tài)分析擴展的提示。
Visual Studio Code(VS Code)編輯器的普及正在迅速增長。在最新的Stack Overflow年度開發(fā)人員年度調查中,VS Code占據(jù)了開發(fā)環(huán)境和工具類別。
它快速、簡單、可自定義、可擴展,并且可以在三個領先的開發(fā)平臺上運行:Windows,Linux和Mac。它的受歡迎程度不僅限于使用JavaScript或TypeScript開發(fā)的團隊。我們經(jīng)??吹剿挥糜陂_發(fā)安全關鍵的C/C++軟件。
VS Code得到了市場上廣泛的擴展生態(tài)系統(tǒng)的支持。但是,C/C++靜態(tài)分析的擴展數(shù)量有限。
在4月2020.1版Parasoft C/C++test發(fā)布之前,沒有什么可以幫助您遵守MISRA,CERT和AUTOSAR C++編碼標準的,而無需離開編輯器檢查結果。我的意思是,完整的標準支持Clang-Tidy很酷,但僅涵蓋了這些標準的一小部分。
我們決定填補這一空白,并為這個出色的編輯器提供擴展,以幫助您根據(jù)自己喜歡的編碼標準檢查您剛剛編寫的代碼,查看結果并修復或隱藏它們——所有這些均在VS Code內部。
在本文中,我將重點介紹C/C++的靜態(tài)分析,但我們還支持帶有Parasoft dotTEST靜態(tài)分析擴展功能的C#。
如何開始使用VS Code的C/C++test
使用Visual Studio Code編輯器的Parasoft靜態(tài)分析擴展來啟動和運行的最簡單方法是通過Microsoft Marketplace。
啟動VS Code,然后轉到擴展程序(Ctrl + Shift + X)。在搜索字段中,鍵入“C++test”并安裝擴展。
安裝后,擴展程序將通過以下消息歡迎您:
該消息告知,為了運行帶有VS Code擴展名的靜態(tài)分析,您需要下載C/C++test Standard,這是C/C++test Visual Studio使用的命令行靜態(tài)分析引擎。代碼擴展。
下載C/C++test Standard發(fā)行版后,只需將其解壓縮到您喜歡的任何目錄中,然后安裝試用(或完整)許可證。您的許可證需要包含命令行功能。您可以通過編輯分發(fā)主目錄中的cpptestcli.properties文件來安裝許可證,或將cpptestcli.properties文件放在您的主目錄中,然后在其中放置許可信息。
對于此處的實驗,我們使用C/C++test附帶的Timer示例項目。在VS Code中,切換到Explorer,然后使用“將文件夾添加到工作區(qū)...”將
要執(zhí)行擴展的簡單配置,請在狀態(tài)欄中單擊C/C++test快速入門:
您會看到以下配置選項:
設置如下:
- 選擇C/C++test安裝:指向解壓縮C/C++test Standard的位置。
- 選擇編譯器配置:如果您使用的是GCC 9.2,則選擇與您的項目所使用的最接近的編譯器,例如“GNU GCC 9.x (x86_64)”。
- 選擇測試配置:定義將使用哪些靜態(tài)分析檢查器來掃描您的項目。讓我們保持默認設置。
對于您的實際項目,您可能需要配置其他設置才能開始使用靜態(tài)分析。我們稍后再討論?,F(xiàn)在,已經(jīng)進行了這些設置,請在資源管理器中選擇Timer文件夾。
從上下文菜單中,選擇“C/C++test:分析所選文件…”。OUTPUT面板將開始顯示有關靜態(tài)分析后續(xù)步驟的信息。
分析完成后,“PROBLEMS”問題面板將顯示靜態(tài)分析報告的所有結果。它應如下所示:
您可以通過單擊“問題”面板中的行來分析發(fā)現(xiàn)。當您選擇一個發(fā)現(xiàn)時,C/C++test擴展將帶您到源代碼,您可以在其中查看報告問題的原因。
如果原因尚不清楚,請在“問題”面板中右鍵單擊結果,然后選擇“顯示<靜態(tài)分析規(guī)則>的文檔”。它將向您顯示詳細說明。
如果您希望忽略發(fā)現(xiàn),請右鍵單擊并選擇“禁止違反
或者,您可以從視圖中“刪除違反
設置用于靜態(tài)分析的編譯命令行
我提到過,對于您的實際項目,您可能需要再配置一個選項才能開始使用靜態(tài)分析。這與構建信息有關,更具體地說,與編譯命令行有關。
靜態(tài)分析引擎需要知道要分析的每個文件的編譯命令行。根據(jù)項目的構建方式,可以應用不同的策略來提供此信息。
讓我們來看看我們的Timer示例如何發(fā)生。
切換到“輸出”面板,該面板仍應包含我們分析運行的輸出。
一直向上滾動。在輸出的第二行中,您應該看到擴展執(zhí)行的C/C++test Standard命令行。它將從“cpptestcli”開始。有趣的部分在此命令行的末尾。
在這種情況下,C/C++test靜態(tài)分析引擎被告知“跟蹤”構建以獲取所需的編譯命令行信息。您也可以將此策略應用于其他構建系統(tǒng)。效果很好:
Cpptestcli執(zhí)行在-trace選項之后指定的build命令。將自動掃描構建信息并將其保存到cpptest.bdf文件中,該文件現(xiàn)在在“Timer”文件夾中可見,并用作靜態(tài)分析的輸入。
一切都很好,但是如果我想重新運行靜態(tài)分析會怎樣?好吧,使用默認設置,C/C++test將重新運行您的構建。對于實際項目來說不是一個好的選擇。
更改方法如下:
- 打開擴展名設置。
- 點擊Ctr+Shift+P。
- 鍵入“C/C++test: Quick Start”,然后選擇“打開設置...”。(或使用狀態(tài)欄中的C/C++test快速入門。)
您將看到如下所示的擴展程序設置:
:
構建信息配置是“命令行模式”設置的一部分。在設置面板中,選擇“計時器”(在“用戶和工作區(qū)”旁邊)以僅修改“計時器”文件夾的設置。
轉到命令行模式,移至末尾,然后自定義模式,將“-trace make clean all”替換為“-input ${workspaceFolder}/cpptest.bdf”,如下所示:
使用此設置,無論何時運行靜態(tài)分析,C/C++test都不會重新執(zhí)行構建過程,而只是加載在第一次構建過程中生成的cpptest.bdf的內容,并且可以更快地執(zhí)行分析。您可以在此處了解有關構建數(shù)據(jù)文件的更多信息。
設置CMake
對于那些使用CMake進行項目的人來說,還有一個選項可以簡化設置過程。C/C++test可以將可由CMake自動生成的compile_commands.json文件作為分析的輸入。
在本文中為我們的Timer示例配置compile_commands.json文件生成。
完成后,再訪問設置面板一次(Ctr+Shift+P,鍵入“C/C++test: Quick Start”,然后選擇“打開設置...”或使用“C/C++test”在狀態(tài)欄中的快速入門)。
轉到命令行模式字段,然后如下所示進行修改:
于是,您可以使用CMake構建自動生成的文件,并簡化設置。
擴展中還有一些其他有趣的選項和命令,我邀請您進行探索。例如,您可以從CI/CD管道中生成的文件中導入靜態(tài)分析結果,并在本地進行查看。
希望本文對Visual Studio Code編輯器的C/C++test擴展有所幫助。