針對程式代碼涵蓋範圍進行疑難解答
適用於: Visualstudio
Visual Studio 中的程式碼涵蓋範圍分析工具會收集原生和受控元件的數據, (.dll 或 .exe 檔案) 。 不過,在某些情況下,[ 程式代碼涵蓋範圍結果 ] 視窗會顯示類似「產生空白結果:...」的錯誤。 本文可協助您進行疑難解答,並解決您可能會遇到空白結果的各種原因。
您應該看到什麼?
如果您在 [測試] 功能表上選擇 [分析程式代碼涵蓋範圍] 命令,而且組建和測試成功執行,則應該會在 [程式代碼涵蓋範圍] 視窗中看到結果清單。 您可能必須展開專案以查看詳細數據。
如需詳細資訊,請 參閱使用程式碼涵蓋範圍來判斷測試的程式碼數量。
看不到任何結果或舊結果的可能原因
您未使用正確的 Visual Studio 版本
您需要 Visual Studio Enterprise。
未執行任何測試
分析
檢查輸出視窗。 在 [ 顯示輸出來源 ] 下拉式清單中,選擇 [ 測試]。 查看是否有任何警告或錯誤記錄。
說明
程式代碼涵蓋範圍分析會在測試執行時完成。 它只包含在測試執行時載入記憶體的元件。 如果未執行任何測試,則程式代碼涵蓋範圍不會報告任何專案。
解決方案
在 [測試總管] 中,選取 [ 全部執行 ] 以確認測試成功執行。 使用 分析程式代碼涵蓋範圍之前,請先修正任何失敗。
您正在查看先前的結果
當您修改並重新執行測試時,仍然可以看到先前的程式代碼涵蓋範圍結果,包括舊執行的程式代碼著色。 請遵循下列步驟來解決問題:
- 執行 分析程式代碼涵蓋範圍。
- 請確定您已在 [程式 代碼 涵蓋範圍結果] 視窗中選取最新的結果集。
.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.exe 或 vsperfmon.exe。
說明
如果元件已由另一個程式代碼剖析工具檢測或優化,則程式代碼涵蓋範圍分析中會省略元件。 無法在這類元件上執行程式代碼涵蓋範圍分析。
解決方案
關閉優化並使用新的組建。
程序代碼不是Managed (.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 檔案來執行單元測試,以設定程式代碼涵蓋範圍選項。 選項可讓您包含或排除檔案。 如需詳細資訊,請參閱 自定義程式代碼涵蓋範圍分析。
解決方案
從 .runsettingsInclude
檔案移除所有節點,然後移除所有Exclude
節點。 如果這可修正問題,請將它們放回階段。
請確定 DataCollectors 節點指定程式代碼涵蓋範圍。 將它與 自定義程式代碼涵蓋範圍分析中的範例進行比較。
某些程式代碼一律會顯示為未涵蓋
在檢測之前,會先執行原生 DLL 中的初始化程序代碼
分析
在靜態連結的原生程式代碼中,即使已執行程式碼,初始化函式 DllMain 的一部分及其呼叫的程式碼有時仍會顯示為未涵蓋。
說明
程式代碼涵蓋範圍工具的運作方式是在應用程式開始執行之前,將檢測插入元件中。 在任何事先載入的元件中, DllMain 中的初始化程式代碼會在載入元件時以及應用程式執行之前立即執行。 該程式代碼似乎未涵蓋,通常適用於靜態載入的元件。
解決方案
無。