共用方式為


/analyze (程式碼分析)

啟用程式碼分析和控制選項。

語法

一般分析選項:

/analyze[-]
/analyze:only
/analyze:quiet
/analyze:max_paths number
/analyze:stacksize number
/analyze:WX-

分析外掛程式選項:

/analyze:plugin plugin_dll

外部檔案分析選項:

/analyze:external-
/analyze:external:ruleset ruleset_files

分析記錄選項:

/analyze:autolog[-]
/analyze:autolog:ext extension
/analyze:log log_path

記錄檔格式選項:

/analyze:log:format:sarif
/analyze:log:format:xml

記錄檔內容選項:

/analyze:sarif:analyzedfiles[-]
/analyze:sarif:configuration[-]
/analyze:log:compilerwarnings
/analyze:log:includesuppressed

規則集選項:

/analyze:rulesetruleset_file

規則集選項:

/analyze:projectdirectory project_directory
/analyze:rulesetdirectory ruleset_directories
/analyze:ruleset ruleset_files

引數

一般分析選項

/analyze[-]
開啟程式碼分析。 使用 /analyze- 明確關閉分析。 /analyze- 是預設行為。

根據預設,分析輸出會移至主控台或 Visual Studio 輸出視窗,就像其他錯誤訊息一樣。 程式碼分析也會建立名為 filename.nativecodeanalysis.xml 的記錄檔,其中 filename 是分析的原始程式檔名稱。

/analyze:only
根據預設,編譯器會編譯器代碼,以在程式碼分析執行之前產生物件檔。 選項 /analyze:only 可讓編譯器略過程式碼產生階段,並直接執行程式碼分析。 編譯器錯誤仍然會防止程式碼分析執行。 不過,編譯器不會報告在程式碼產生階段期間可能會發現的其他警告。 如果程式沒有程式碼產生警告,分析結果可能不可靠。 建議您只有在程式碼通過程式碼產生語法檢查而不發生錯誤或警告時,才使用此選項。

/analyze:quiet
關閉主控台或 Visual Studio [輸出] 視窗的分析輸出。

/analyze:max_paths number
參數 number 會指定要分析的程式碼路徑數目上限。 分析預設為 256 個路徑。 較大的值會造成更徹底的檢查,但分析可能需要較長的時間。

/analyze:stacksize number
參數 number 會指定產生警告 C6262 之堆疊框架的位元組大小。 預設堆疊框架大小為 16KB。

/analyze:WX-
告知編譯器,即使使用 選項, /WX 也不會將程式碼分析警告視為錯誤。 如需詳細資訊,請參閱 /WX (警告層級)。

分析外掛程式選項

/analyze:plugin plugin_dll
啟用指定的程式碼分析外掛程式 DLL 以進行程式碼分析。

如果路徑不需要雙引號 ( " ) ,則 plugin_dll 與檔案路徑之間的 /analyze:plugin 空格是選擇性的。 例如,您可以撰寫 /analyze:plugin EspxEngine.dll 。 不過,如果路徑以雙引號括住,您就無法在 和檔案路徑之間 /analyze:plugin 有空格。 範例如下:/analyze:plugin"c:\path\to\EspxEngine.dll"

程式碼分析引擎會使用外掛程式來協助尋找特定類別的瑕疵。 程式碼分析引擎隨附一些可偵測各種缺陷的內建外掛程式。 若要搭配程式碼分析引擎使用另一個外掛程式,請使用 /analyze:plugin 選項加以指定。

外掛程式 LocalEspC.dll 會實作並行分析檢查。 這些檢查會在 C261XX 範圍中引發警告,例如 C26100 C26167

若要載入 LocalEspC.dll ,請使用編譯器選項 /analyze:plugin LocalEspC.dll

某些外掛程式,例如 EspXEngine.dll ,隨附于 Visual Studio,會採用可進行進一步分析的延伸模組。 Visual Studio 包含 EspXEngine 的這些延伸模組: ConcurrencyCheck.dllCppCoreCheck.dllEnumIndex.dllHResultCheck.dll 、 和 VariantClear.dll 。 它們會分別檢查並行問題的缺陷、CppCoreGuidelines 違規、不適當的值使用 enum 作為索引、 HRESULT 值或 VARIANT 值。

當您在命令列上建置時,可以使用 Esp.Extensions 環境變數來指定 EspXEngine 擴充功能。 例如:

set Esp.Extensions=ConcurrencyCheck.dll;CppCoreCheck.dll;

使用分號 ( ; ) 分隔延伸模組,如範例所示。 不需要尾端分號。 您可以使用副檔名的絕對檔案路徑,或從包含 的 EspXEngine.dll 目錄指定相對路徑。

外掛程式 EspXEngine.dll 會使用 ConcurrencyCheck.dll 來實作並行相關程式碼分析檢查。 這些檢查會在 C261XX 範圍中引發警告,例如 C26100 C26167

如果您要在開發人員命令提示字元視窗中建置,請先設定 Esp.Extensions 環境變數以指定 ConcurrencyCheck.dll 延伸模組:

set Esp.Extensions=ConcurrencyCheck.dll

然後,使用編譯器選項 /analyze:plugin EspXEngine.dll 來使用 EspXEngine 外掛程式。

外部檔案分析選項

從 Visual Studio 2019 16.10 版開始,您可以為外部標頭指定不同的分析規則和行為。 /external:I使用 、 /external:env/external:anglebrackets 選項,將目錄指定為「外部」目錄。 使用 #include 外部目錄或其子目錄所包含的任何檔案,都會被視為外部標頭。 如需詳細資訊,請參閱 /external (外部標頭診斷)。

程式碼分析提供下列選項來控制外部檔案的分析:

/analyze:external-
略過外部標頭檔的分析。 根據預設,程式碼分析會分析外部標頭檔,就像其他檔案一樣。 /analyze:external-設定選項時,程式碼分析會略過任何指定為外部的檔案,但外部檔案的範本除外。 在外部標頭中定義的範本會使用 /external:templates- 選項視為非外部。 選項 /external:Wn 不會影響程式碼分析。 例如,程式碼分析會分析外部檔案和報告瑕疵,即使已指定也一樣 /external:W0

/analyze:external:ruleset ruleset_files
參數 ruleset_files 會指定要用於分析外部檔案的一或多個分號分隔規則集檔案。 如需規則集的相關資訊,請參閱一節。

有一個環境變數 ( CAExcludePath ) 提供類似但更簡單的功能,可略過環境變數中所指定目錄下的檔案分析。 如果在 選項和 CAExcludePath 環境變數中 /external:* 指定目錄,則會將其視為已排除,而且 /analyze:external* 選項不會套用至該目錄。

分析記錄選項

/analyze:autolog[-]
此旗標是用來針對要分析的每個來源檔案啟用分析記錄檔的建立。 記錄檔現在預設會建立,因此此旗標大部分是多餘的。 使用時,它會將預設記錄延伸模組變更為 *.pftlog.xml 而不是 。 使用 /analyze:autolog- 來停用對檔案的記錄。

/analyze:autolog:ext extension
覆寫分析記錄檔的預設擴充功能,並改用 extension 。 如果您使用 .sarif 副檔名,記錄檔會使用 SARIF 格式,而不是預設的 XML 格式。

/analyze:log log_path
指定記錄檔路徑 log_path ,而不是自動產生的記錄檔路徑。 log_path當路徑具有尾端反斜線並參考現有的目錄時,程式碼分析會在指定的目錄中建立所有記錄檔。 否則, log_path 指定檔案路徑。 檔案路徑會指示編譯器將所有分析來源檔案的記錄合併到指定的記錄檔中。 如果檔案路徑具有 .sarif 副檔名,則記錄檔會使用 SARIF 格式,而不是預設的 XML 格式。 您可以使用 /analyze:log:format:* 選項覆寫這個行為。

記錄檔格式選項

從 Visual Studio 2019 16.9 版開始,您可以指定不同的記錄格式選項來進行程式碼分析。

/analyze:log:format:xml
強制使用與使用的副檔名無關的 XML 記錄格式。

/analyze:log:format:sarif
強制使用與所用副檔名無關的 SARIF 記錄格式。

記錄檔內容選項

從 Visual Studio 2019 16.9 版開始,您可以針對程式碼分析指定不同的記錄內容選項。

/analyze:sarif:analyzedfiles[-]
針對未發出警告的已分析檔案,將檔案成品專案新增至 SARIF 記錄檔。 此選項預設為停用。 一律會包含來源檔案和發出結果之檔案的成品。

/analyze:sarif:configuration[-]
新增規則組態專案,以決定使用者如何覆寫預設規則組態(預設為停用)。

/analyze:log:compilerwarnings
將分析引擎發現的任何瑕疵,以及所有編譯器警告新增至分析記錄檔。 根據預設,編譯器警告不會包含在分析記錄檔中。 如需程式碼分析期間編譯器警告的詳細資訊,請參閱 /analyze:only 選項。

/analyze:log:includesuppressed
將隱藏的警告和未壓縮的警告新增至分析記錄檔。 根據預設,分析記錄檔中不會包含隱藏的警告。 如果已指定規則集檔案進行分析,即使已指定,規則集檔案所停用的警告也不會包含在記錄 /analyze:log:includesuppressed 檔中。

規則集選項

/analyze:projectdirectory project_directory
指定目前的專案目錄。 如果規則集(或其包含的專案)是檔案名,編譯器會先在指定的 project_directory 下尋找檔案。 如果找不到,它會接著搜尋 ruleset_directories/analyze:rulesetdirectory 指定的 ,如果有的話。 如果規則集(或其包含的專案)是相對路徑,編譯器會先尋找專案目錄下的檔案。 如果找不到規則集,則會在目前的工作目錄中尋找。 此選項可從 Visual Studio 2019 16.9 版開始使用。

/analyze:rulesetdirectory ruleset_directories
指定以分號分隔的規則集搜尋路徑清單。 如果規則集(或其包含的專案)是檔案名,則編譯器會先在 指定的 /analyze:projectdirectoryproject_directory 尋找檔案,如果有的話,後面接著指定的 ruleset_directories 。 此選項可從 Visual Studio 2019 16.9 版開始使用。

/analyze:ruleset ruleset_files
指定要用於分析的一或多個規則集檔案。 此選項可讓分析更有效率;在執行之前,分析引擎會嘗試排除在規則集檔案中未指定作用中規則的檢查程式。 否則,引擎會執行已啟用的所有檢查程式。

/analyze:ruleset ruleset_file
指定要用於分析的規則集檔案。 此選項可讓分析更有效率;分析引擎會先嘗試排除在規則集檔案中未指定作用中規則的檢查程式,再執行。 否則,引擎會執行已啟用的所有檢查程式。

在 中找到 %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets 隨附于 Visual Studio 的規則集檔案。

下列範例自訂規則集會告訴分析引擎檢查 C6001 和 C26494,並將其報告為警告。

只要在 引數中指定完整路徑,您就可以將這個檔案放在任何地方。

只要在 引數中指定完整路徑,或在 或 /analyze:rulesetdirectory 選項中指定的 /analyze:projectdirectory 目錄下,您就可以將這個檔案放在任何地方。

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description="New rules to apply." ToolsVersion="15.0">
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6001" Action="Warning" />
    <Rule Id="C26494" Action="Warning" />
  </Rules>
</RuleSet>

根據預設,規則集檔案的副檔名為 *.ruleset 。 在流覽規則集檔案時,Visual Studio 會使用預設副檔名。 不過,您可以使用任何擴充功能。

如需規則集的詳細資訊,請參閱 使用規則集來指定要執行的 C++ 規則。

備註

如需詳細資訊,請參閱 C/C++ 的程式碼分析概觀 C/C++ 警告的程式 代碼分析。

在 Visual Studio 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [ 組態屬性程式碼分析 > 一般 ] > 屬性頁。

  3. 修改一或多個程式 代碼分析 屬性。

  4. 選擇 [確定 ] 或 [ 套用 ] 以儲存您的變更。

若要在 Visual Studio 2019 16.10 版和更新版本中設定外部檔案分析選項:

  1. 開啟專案的 [屬性頁] 對話方塊。

  2. 選取 [ 組態屬性 > C/C++ > External Includes ] 屬性頁。

  3. 設定屬性:

    • 停用外部標頭的程式碼分析會 設定 /analyze:external- 選項。

    • 外部標頭 的分析規則集會設定 /analyze:external:ruleset path 選項。

  4. 選擇 [確定 ] 或 [ 套用 ] 以儲存您的變更。

若要以程式方式設定這個編譯器選項

  1. 請參閱 EnablePREfast

另請參閱

MSVC 編譯器選項
MSVC 編譯器命令列語法