共用方式為


針對程式碼涵蓋範圍進行疑難排解

適用於: Visual Studio

Visual Studio 中的程式碼涵蓋範圍分析工具會收集原生組件和 Managed 組件 (.dll.exe 檔) 的資料。 不過,在某些情況下,[ 程式代碼涵蓋範圍結果 ] 視窗會顯示類似「產生的空白結果:...」的錯誤。 本文可協助您針對可能遇到空白結果的各種原因進行疑難解答和解決。

您應該看到什麼?

如果您選擇 [測試] 功能表上的 [分析程式碼涵蓋範圍] 命令,而且組建和測試皆順利執行,則您應該會在 [程式碼涵蓋範圍] 視窗中看見結果清單。 您可能必須展開項目才能查看詳細資料。

顯示具有著色之程式代碼涵蓋範圍結果的螢幕快照。

如需詳細資訊,請參閱使用程式碼涵蓋範圍來決定所測試的程式碼數量

看不見任何結果或看見舊結果的可能原因

您不是使用正確的 Visual Studio 版本

您需具備 Visual Studio 企業版。

沒有執行過任何測試

分析

請查看輸出視窗。 在 [顯示輸出來源] 下拉式清單中選擇 [測試]。 檢查是否有記錄任何警告或錯誤。

說明

程式碼涵蓋範圍分析會在執行測試時進行。 這項分析只包括在執行測試時載入記憶體的組件。 如果沒有執行任何測試,程式碼涵蓋範圍就不會產生任何報告。

解決方法

在 [測試總管] 中,選取 [ 全部 執行] 以確認測試已成功執行。 在使用 [分析程式碼涵蓋範圍] 之前修正所有錯誤。

您看到的是之前的結果

當您修改並重新執行測試時,可能仍會顯示先前的程式碼涵蓋範圍結果,包括在先前執行時著色的程式碼。 請遵循下列步驟來解決問題:

  1. 執行 分析程式代碼涵蓋範圍
  2. 請務必在 [程式碼涵蓋範圍結果] 視窗中選取最新的一組結果。

.pdb (符號) 檔案無法使用

分析

開啟編譯目標資料夾(通常是 bin\debug),並確認每個元件的 .pdb 檔案位於與.dll.exe檔案相同的目錄中

說明

程式代碼涵蓋範圍引擎會要求每個元件在測試回合期間都有其相關聯的 .pdb 檔案可供存取。 如果特定元件沒有 .pdb 檔案,則不會分析元件。

產生 .pdb 檔的組建必須是產生 .dll.exe 檔案的組建。

解決方法

請確定您的組建設定會產生 .pdb 檔案。

  • 如果在建置專案時未更新 .pdb 檔案,請開啟專案屬性,選取 [建置] 頁面,選擇 [進階],然後檢查 [偵錯資訊]。

  • 在 Visual Studio 2022 和更新版本中,針對以 .NET Core 或 .NET 5+ 為目標的 C# 專案,開啟專案屬性,選取 [建 置] 索引標籤,選擇 [一般],然後檢查 [偵錯] 符號。

  • 針對C++專案,請確定產生的 .pdb 檔案具有完整的偵錯資訊。 開啟項目屬性,並確認連結器>>偵錯產生偵錯資訊已設定為 [產生偵錯資訊] 已針對共用和發佈優化 (/DEBUG:FULL) 進行優化。

如果 .pdb.dll.exe 檔案在不同的位置,請將 .pdb 檔複製到同一個目錄中。 您也可以設定程式代碼涵蓋範圍引擎,以在另一個位置搜尋 .pdb 檔案。 如需詳細資訊,請參閱自訂程式碼涵蓋範圍分析

使用已檢測或優化的二進位檔

分析

判斷二進位檔是否已經歷任何形式的進階優化,例如配置檔引導式優化,或已由分析工具檢測,例如 vsinstr.exevsperfmon.exe

說明

如果組件已完成另一個程式碼剖析工具的檢測或最佳化,程式碼涵蓋範圍分析會略過該組件。 無法在此類組件上執行程式碼涵蓋範圍分析。

解決方法

關閉最佳化並使用新的組建。

程式代碼不受管理 (.NET) 或原生 (C++) 程式代碼

分析

判斷您是否在 Managed 或 C++ 程式代碼上執行一些測試。

說明

在 Visual Studio 中的程式碼涵蓋範圍分析只適用於 Managed 和機器碼 (C++)。 如果您使用協力廠商工具,部分或所有程式碼可能會在不同平台上執行。

解決方法

無法使用。

專案名稱包含 'DataCollector'

在項目名稱中使用 DataCollector 的專案將不會透過程式代碼涵蓋範圍來識別。

NGen 已安裝組件

分析

判斷元件是否從原生映像快取載入。

說明

基於效能考慮,不會分析原生映射元件。 如需詳細資訊,請參閱 Ngen.exe (原生映像產生器)

解決方法

使用組件的 MSIL 版本。 請不要用 NGen 處理。

自定義 .runsettings 檔案有語法問題

分析

如果您使用自定義 .runsettings 檔案,它可能包含語法錯誤。 程式代碼涵蓋範圍未執行,而且程式代碼涵蓋範圍視窗不會在測試回合結束時開啟,或顯示舊的結果。

說明

您可以使用自定義 .runsettings 檔案來執行單元測試,以設定程式代碼涵蓋範圍選項。 這些選項可讓您包含或排除檔案。 如需詳細資訊,請參閱自訂程式碼涵蓋範圍分析

解決方法

可能發生兩種類型的錯誤:

  • XML 錯誤

    在 Visual Studio XML 編輯器中開啟 .runsettings 檔案。 尋找錯誤。

  • 規則運算式錯誤

    檔案中的每個字串都是規則運算式。 檢閱每一個錯誤,特別要尋找:

    • 不相符的括弧 (...) 或未逸出的括弧 \(...\)。 如果要比對搜尋字串中的括號,必須逸出該括號。 例如,比對函式的用法: .*MyFunction\(double\)
    • 運算式開頭的星號或加號。 若要比對任何字元字串,請在星號後面加上點:.*

自訂 .runsettings 檔包含不正確的排除項

分析

如果您使用自定義 .runsettings 檔案,請確定它包含您的元件。

說明

您可以使用自定義 .runsettings 檔案來執行單元測試,以設定程式代碼涵蓋範圍選項。 這些選項可讓您包含或排除檔案。 如需詳細資訊,請參閱自訂程式碼涵蓋範圍分析

解決方法

.runsettings 檔案中移除所有Include節點,然後移除所有Exclude節點。 如果這樣可以解決問題,請將它們放回階段。

確定 DataCollectors 節點有指定 [程式碼涵蓋範圍]。 請將它和自訂程式碼涵蓋範圍分析中的範例比較。

某些程式碼一定會顯示為不涵蓋

原生 DLL 中的初始化程式碼會在檢測之前執行

分析

在靜態連結機器碼中,即使程式碼已執行,有時仍會將部分的初始化函式 DllMain 及它所呼叫的程式碼顯示為未涵蓋。

說明

程式碼涵蓋範圍工具的運作方式是,在應用程式開始執行之前將測試設備插入組件中。 在這之前載入的任何組件中,DllMain 中的初始化程式碼會於組件載入,以及應用程式執行之前時執行。 該程式碼會顯示為未涵蓋,這通常適用於靜態載入的組件。

解決方法

無。

參考資料