如何執行驅動程式的程式代碼分析

驅動程式的程式代碼分析提供原始程式碼中可能瑕疵的相關信息。 您可以手動執行程式代碼分析,您也可以使用每個組建自動執行程式代碼分析。

本主題內容:

執行程式碼分析

手動對驅動程式原始程式碼執行程式碼分析

  1. 在 Visual Studio 中,選取驅動程式項目檔或方案,然後選取要分析的項目組態和平臺。
  2. 從 [ 分析 ] 或 [ 建置] 功能表中,單擊 [ 在方案上執行程序代碼分析]。

使用每個組建自動對驅動程式原始碼執行程式碼分析

  1. 在 Visual Studio 中,以滑鼠右鍵按兩下 方案總管 中的驅動程式專案或方案,然後按兩下 [屬性]。
  2. 在專案的 [屬性] 對話框中,按兩下 [ 程序代碼分析]。
  3. [C/C++ 屬性的程式代碼分析] 頁面中,選取您想要分析 (的項目組態和平臺,例如,Windows 8 和 Win32) 。
  4. 選取 [在建置時啟用 C/C++ 的程式代碼分析]。
  5. 在 [規則集] 底下,選取 [Microsoft 驅動程序建議規則]。 這是驅動程式的預設規則集。
  6. 在 [ 建置 ] 功能表中,按兩下 [ 建置方案]。

檢視程式代碼分析結果

如果在原始程式碼中找到可能的瑕疵,[程序 代碼分析結果 ] 視窗會顯示程式代碼分析警告編號,以及發生瑕疵的來源檔案中的行號。

檢視瑕疵

  1. 在 [ 程序代碼分析結果] 視窗中,按兩下行號,並在 [ 程序代碼分析結果 ] 視窗中顯示瑕疵的描述。

    [程序代碼] 視窗會顯示原始程式碼,並指出瑕疵發生的位置。

  2. 若要深入瞭解特定警告,請按兩下 [程序 代碼分析結果 ] 視窗中的 [警告]。

檢視與組建相關聯的程式代碼分析記錄檔

  1. 瀏覽至組建組態和平臺 (的目錄, \\Windows7Release\\x64 例如,) 。
  2. 如果您使用建議的規則,則記錄檔稱為 vc.\*codeanalysis.xml。 如果您要為 Windows Server 2012 建立驅動程式,則會使用此檔案來建立驅動程式驗證記錄。

隱藏瑕疵報表

在某些情況下,您可能會想要隱藏特定警告訊息的報告;例如,如果警告主要是參考性,而且您知道錯誤的原因。

隱藏警告訊息

  1. 若要移除回報瑕疵的實例,請在 [ 程序代碼分析結果 ] 視窗中選取行號和警告。

  2. 在警告的展開描述中,按兩下 [動作>隱藏來源中的訊息>]。

    具有隱藏規範的 pragma 警告指示詞只會隱藏緊接在 #pragma warning 語句後面的程式代碼行警告。

    #pragma warning(suppress: 6014)
    

變更核心模式驅動程式警告 C6262 的堆疊使用量限制

在使用者模式和核心模式程序代碼中,堆疊空間有限,且無法認可堆疊的頁面會導致堆疊溢位例外狀況。 高堆疊使用量特別在核心模式中,因為可用的堆疊空間總計只有 12 KB。 核心模式程式代碼應該積極限制堆疊使用。

如果函式在本機使用超過 1 KB 的堆疊空間,程式代碼分析工具會發出警告 C6262 。 如果您想要調查可能耗用大量資源的函式,您可以自定義或降低 C6262 所使用的堆棧閾值限制。 如果您降低堆疊閾值限制,程式代碼分析工具可能會發現更多問題。 然後,您可以選擇解決這些堆疊使用量問題。 例如,您可以將臨界值降低為 400 個字節,以查看其他函式是否使用資源。

自定義 C6262 的堆疊大小限制

  1. 在 [記事本] 或其他文本編輯器中,開啟核心模式驅動程式 (或元件) 的 Visual Studio 專案檔 (.vcxproj) 。
  2. 為編譯<程式 ClCompile> 新增 ItemDefinitionGroup>。<
  3. <新增PREfastAdditionalOptions>元素,並設定堆疊大小<位元組>。 默認值為 stacksize1024
     <ItemDefinitionGroup>
       <ClCompile>


      <!-- Change stack depth for C6262 from 1024 to 400 -->
      <PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>

    </ClCompile>
  </ItemDefinitionGroup>
  1. 儲存專案檔。 啟動 Visual Studio、載入更新的驅動程式專案,然後執行程式代碼分析。

    若要還原為預設值 1 KB,請復原您對項目檔所做的變更,或將堆棧大小值變更為 stacksize1024

驅動程式程式碼分析警告