共用方式為


疑難排解程式碼涵蓋範圍

在 Visual Studio 中的程式碼涵蓋範圍分析工具收集原生資料和 Managed 組件 (.dll 或 .exe 檔)。 不過,在某些情況下,程式碼涵蓋範圍結果視窗中顯示類似「產生的結果:…」的錯誤。 有幾個可能發生的原因。 本主題的目的是協助解決這些問題。

您應做的變更

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

顯示著色內容的程式碼涵蓋範圍結果

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

無查看結果的可能原因

JJ159523.collapse_all(zh-tw,VS.110).gif沒有任何測試執行。

  • 分析
    檢查您的輸出視窗。 在顯示輸出來源下拉式清單中,選取測試。 檢查是否有記錄的任何警告或錯誤。

  • 說明
    在測試執行時,程式碼涵蓋範圍分析完成。 在測試執行時的組件,它只包括載入記憶體。 如果測試都沒有執行,那麼也沒有程式碼涵蓋範圍會報告。

  • 解決方式
    在測試總管中,選取全部執行驗證測試執行成功。 在使用分析程式碼涵蓋範圍之前修正任何錯誤。

JJ159523.collapse_all(zh-tw,VS.110).gif.pdb(符號) 檔案無法使用

  • 分析
    開啟編譯目標資料夾 (通常是 bin\debug),並確認每個組件,會在目錄中有和 .dll 或 .exe 檔相同的 .pdb 檔案。

  • 說明
    程式碼涵蓋範圍引擎會要求每個組件在測試回合期間,都有相關聯且可存取的 .pdb 檔案。 如果沒有特定組件的 .pdb 檔,就不會進行分析。

    和 .dll 或 .exe 檔案相同,必須從組建產生 .pdb 檔。

  • 解決方式
    請確定您的組建組態產生 .pdb 檔。 如果建置專案時 .pdb 檔案不會更新,請開啟專案屬性,選取組建頁面上,選取進階,並檢查 偵錯資訊

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

JJ159523.collapse_all(zh-tw,VS.110).gif使用已檢測的或最佳化的二進位檔

  • 分析
    請確定二進位檔是否接受進階最佳化任何表單,例如特性指引最佳化,或者是由程式碼剖析工具(例如 vsinstr.exe 或 vsperfmon.exe)檢測。

  • 說明
    如果組件是由另一個程式碼剖析工具已檢測或最佳化,組件在程式碼涵蓋範圍分析會省略。

    程式碼涵蓋範圍分析在這類組件無法執行。

  • 解決方式
    關閉最佳化並使用新的組建。

JJ159523.collapse_all(zh-tw,VS.110).gif程式碼不是 Managed (.NET) 或原生 (C++) 程式碼

  • 分析
    確認您在執行 Managed 或 C++ 程式碼的某些測試。

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

  • 解決方式
    無法使用

JJ159523.collapse_all(zh-tw,VS.110).gif組件由 NGen 安裝

  • 分析
    驗證組件不會從原生映像快取載入。

  • 說明
    基於效能考量,原生映像的組件不會分析。 如需詳細資訊,請參閱Ngen.exe (原生映像產生器)

  • 解決方式
    使用組件的MSIL 版本。 請勿與 NGen處理它。

JJ159523.collapse_all(zh-tw,VS.110).gif未正確語法的自訂 .runsettings 檔案

  • 分析
    如果您使用自訂 .runsettings 檔案,其中可能包含語法錯誤。

    這會導致程式碼涵蓋範圍完全未執行。 在測試回合結束時,程式碼涵蓋範圍視窗未開啟,則會顯示舊的結果。

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

  • 解決方式
    可能發生錯誤的兩種型別:

  • XML 錯誤

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

  • 規則運算式編輯器

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

    • 無對應的括號(...)或無逸出的括號(\… \). 如果您希望符合搜尋字串的其中一個括號,您必須將之逸出。 例如,比對函式的用法: .*MyFunction\(double\)

    • 在運算式的開頭的星號或加號。 若要對應字串,請使用星號後面使用點: .*

JJ159523.collapse_all(zh-tw,VS.110).gif具有無效排除的 .runsettings 檔案

  • 分析
    如果您使用自訂 .runsettings 檔案,確定它包含您的組件。

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

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

    確定DataCollectors 節點有指定程式碼涵蓋範圍。 與 自訂程式碼涵蓋範圍分析的範例比較。

某些程式碼一定會未涵蓋

JJ159523.collapse_all(zh-tw,VS.110).gif在原生 DLL 的初始化程式碼在檢測之前執行。

  • 分析
    以靜態方式連結的機器碼,而呼叫的一部分的初始化函式 DllMain 和程式碼會顯示為未涵蓋,即使程式碼已執行。

  • 說明
    程式碼涵蓋範圍工具功能在應用程式開始執行之前,可插入檢測旁邊輸入組件。 在這個階段之前載入的所有組件,在應用程式之前執行前,在DllMain 的初始化程式碼會執行,將組件載入。 程式碼看起來會像不包含在其中。

    通常,這是用於靜態地載入的組件。

  • 解決方式
    無。

請參閱

其他資源

使用程式碼涵蓋範圍來決定所測試的程式碼數量