增加修正效能問題的機會
Visual Studio 使用者廣泛使用「回報問題」工具來回報一系列問題。 Visual Studio 小組會在使用者意見反應中發現當機和緩慢趨勢,並解決影響廣大使用者的問題。 特定意見反應票證愈可行,產品小組就愈有可能快速地診斷及解決。 本文件說明報告當機或緩慢問題時的最佳做法,讓您更易於針對問題採取動作。
一般最佳做法
Visual Studio 是一個大型、複雜的平台,可支援多種語言、專案類型、平台等等。 其執行方式是工作階段中安裝及作用中的元件、安裝的延伸模組、Visual Studio 設定、電腦設定,以及正在編輯程式碼圖形的功能。 考量到各種變動的情況,即使可見的徵兆相同,很難判斷某個使用者的問題報告是否與另一位使用者的問題報告有相同的根本問題。 假設有一些最佳做法,可確保您的特定問題報告更有可能診斷出來。
盡可能提供具體的標題
尋找所回報問題的不同特徵標記,並在標題中盡可能包含更多的內容。 如果標題具有描述性,則不太可能有不相關問題 (但相同的表面徵兆) 的使用者會針對您的票證進行投票或評論,從而更難診斷您的問題。
如有疑問,請記錄新問題報告
許多問題可能沒有任何獨特的特徵標記或重現步驟。 在這種情況下,新的報告比贊同或評論另一份回報類似的表面徵兆的報告更好。 視報告類型而定,請將其他診斷檔案包含在報告中,如本文件稍後所述。
問題專屬的最佳做法
以下所述是難以診斷且沒有良好診斷檔案的問題。 找出最能描述您問題的案例之後,請遵循該案例特有的意見反應步驟。
當機:當處理程序 (Visual Studio) 意外終止時,就會發生當機。
無回應:VS 變得長時間沒有回應。
緩慢問題:VS 中的任何特定動作比預期更慢
高 CPU:長時間非預期的高 CPU 使用量
跨處理程序問題:Visual Studio 附屬處理程序所造成的問題
損毀
當處理程序 (Visual Studio) 意外終止時,就會發生當機。
可直接重現的當機
可直接重現的當機是具有下列所有特性的情況:
可以遵循一組已知的步驟來觀察
可以在多部電腦上觀察到 (如果有的話)
可以在範例程式碼或可連結至或提供作為意見反應一部分的專案中重現 (如果步驟涉及開啟專案或文件)
針對這些問題,請遵循「如何回報問題」中的步驟,並確定納入:
重現問題的步驟
如上所述的獨立重現專案。 如果無法進行獨立重現,請納入:
開啟專案的語言 (C#、C++等)
專案種類 (主控台應用程式、ASP.NET 等)
注意
最有價值的意見反應:在此案例中,最有價值的意見反應是重現問題的一組步驟,以及範例原始程式碼。
未知的當機
如果您不確定造成當機的原因,或當機看起來是隨機的,則每次 Visual Studio 當機時,您都可以在本機擷取傾印,並將這些傾印附加至個別的意見反應項目。 若要在 Visual Studio 當機時將傾印儲存在本機,請在系統管理員命令視窗中執行下列命令:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\devenv.exe" /v DumpType /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\devenv.exe" /v DumpCount /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\devenv.exe" /v DumpFolder /t REG_SZ /d "C:\CrashDumps"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService32.exe" /v DumpType /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService32.exe" /v DumpCount /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService32.exe" /v DumpFolder /t REG_SZ /d "C:\CrashDumps"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService.exe" /v DumpType /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService.exe" /v DumpCount /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService.exe" /v DumpFolder /t REG_SZ /d "C:\CrashDumps"
視需要自訂傾印計數和傾印資料夾。 您可以在這裡找到這些設定的相關資訊。
注意
使用工作管理員擷取的傾印可能是錯誤的位元,這使得它們無法使用。 上述程序是擷取堆積傾印的慣用方式。 如果您想要使用工作管理員,請關閉目前正在執行的工作管理員,接著啟動 32 位元工作管理員 (%windir%\syswow64\taskmgr.exe),然後從該處收集堆積傾印。
注意
這個方法所產生的每個傾印檔案大小上限為 4 GB。 請務必將 DumpFolder 設定為具有足夠磁碟機空間的位置,或適當地調整 DumpCount。
每次 Visual Studio 當機時,其都會在設定的位置建立傾印檔案 devenv.exe。[number].dmp 檔案。
然後,使用 Visual Studio 的「回報問題...」功能。 這可讓您附加適當的傾印。
找出您所報告當機的傾印檔案 (尋找具有正確建立時間的檔案)
可能的話,請在提交意見反應之前壓縮檔案 (*.zip) 以減少其大小
請遵循「如何回報問題」中的步驟,並將堆積傾印附加至新的意見反應項目。
注意
最有價值的意見反應:在此案例中,最有價值的意見反應是在當機時擷取的堆積傾印。
無回應
VS 變得長時間沒有回應。
可直接重現的無回應
如有關當機的對應區段所述,針對可在多部電腦上輕鬆重現且可在小型範例中示範的問題,最有價值的意見反應報告是重現問題的步驟,且包含示範問題之範例原始程式碼的報告。
未知的無回應
如果無回應本身的顯示方式無法預測,則在下一次出現時,請啟動新的 Visual Studio 執行個體,並從該執行個體回報問題。 在 [記錄] 畫面中,請務必選取無回應的 Visual Studio 工作階段。 (如需如何記錄我們可以遵循以重現問題之動作的詳細資訊,請參閱如何回報問題頁面上的步驟 8。)
如果無回應的 Visual Studio 執行個體在系統管理員模式中啟動,則第二個執行個體也必須以系統管理員模式啟動。
注意
最有價值的意見反應:在此案例中,最有價值的意見反應是在無回應時擷取的堆積傾印。
緩慢和高 CPU 問題
最能讓緩慢或高 CPU 使用量問題可採取動作的方式,是在緩慢作業或高 CPU 事件進行時所擷取的效能追蹤。
注意
可能的話,請在個別的特定意見反應報告中隔離每個案例。 例如,如果輸入和瀏覽速度都很慢,請依照每個問題執行下列步驟一次。 這有助於產品小組找出特定問題的原因。
如需擷取效能的最佳結果,請遵循下列步驟:
如果尚未執行,請開啟一份 Visual Studio 複本,您可以在其中重現問題
設定所有項目以重現問題。 例如,如果您需要載入特定專案並開啟特定檔案,請確定這兩個步驟都已完成,再繼續進行。
如果您未回報載入方案的特定問題,請在錄製效能追蹤之前,嘗試等候 5-10 分鐘 (或更久,視方案大小而定)。 方案載入程序會產生大量資料,因此等候幾分鐘可協助我們專注於您回報的特定問題。
啟動沒有開啟方案的第二個 Visual Studio 複本
在 Visual Studio 的新複本中,開啟 [回報問題] 工具
請遵循如何回報問題中的步驟,直到您到達「提供追蹤和堆積傾印 (選擇性)」步驟為止。
選擇錄製 Visual Studio 的第一個 (遇到效能問題) 複本,並開始錄製。
[步驟錄製器] 應用程式隨即出現,並開始錄製。
在錄製期間,請在 Visual Studio 的第一個複本中執行有問題的動作。 如果特定效能問題未出現在錄製時間內,我們很難予以修正。
如果動作短於 30 秒,且很容易重複,請重複動作以進一步示範問題。
在大部分情況下,60 秒的追蹤足以示範問題,特別是如果有問題的動作持續 (或重複) 超過 30 秒。 您可以視需要調整持續時間,以擷取您想要修正的行為。
一旦完成您想要回報的緩慢作業或高 CPU 事件,請按一下步驟錄製器中的 [停止錄製]。 處理效能追蹤可能需要幾分鐘的時間。
完成後,您的意見反應可以有數個附件。 附加任何可能有助於重現問題的其他檔案 (範例專案、螢幕擷取畫面、影片等)。
提交意見反應。
錄製效能追蹤時,如果您回報的緩慢作業或高 CPU 即將結束,請立即停止錄製。 如果收集太多資訊,則會覆寫最舊的資訊。 如果在感興趣的作業之後不久 (幾秒鐘內) 並未停止追蹤,則會覆寫有用的追蹤資料。
請勿將效能追蹤直接附加至開發人員社群網站上的現有意見反應項目。 要求/提供其他資訊是 Visual Studio 內建回報問題工具中支援的工作流程。 如果需要效能追蹤才能解決先前的意見反應項目,我們會將意見反應項目的狀態設定為「需要更多資訊」,其回應方式與回報新問題的方式相同。 如需詳細指示,請參閱回報問題工具文件中的〈需要更多資訊〉一節。
注意
最有價值的意見反應:對於幾乎所有緩慢/高 CPU 問題,最有價值的意見反應是您嘗試執行動作的概括描述,以及在此期間擷取行為的效能追蹤 (*.etl.zip)。
進階效能追蹤
回報問題工具中的追蹤收集功能對大部分案例都已足夠。 但有時候需要對追蹤集合進行更多控制 (例如,具有較大緩衝區大小的追蹤),在此情況下,PerfView 是可用的絕佳工具。 如需使用 PerfView 工具手動錄製效能追蹤的步驟,請參閱使用 PerfView 錄製效能追蹤頁面。
跨處理程序問題
注意
從 Visual Studio 2019 16.3 版開始,跨處理程序記錄會自動附加至使用回報問題工具提交的意見反應。 不過,如果問題可直接重現,遵循下列步驟仍可協助新增其他資訊,以協助更妥善地診斷問題。
有數個附屬處理程序會平行執行至 Visual Studio,並提供來自主要 Visual Studio 處理程序外部的各種功能。 如果其中一個附屬處理程序發生錯誤,通常會在 Visual Studio 端看到 'StreamJsonRpc.RemoteInvocationException' 或 'StreamJsonRpc.ConnectionLostException'。
最能讓這些類型問題可採取動作的方式,是提供可依照下列步驟收集的其他記錄:
如果這是可直接重現的問題,請從刪除 %temp%/servicehub/logs 資料夾開始。 如果您無法重現此問題,請讓此資料夾保持不變,並忽略下列項目符號:
- 將全域環境變數 ServiceHubTraceLevel 設定為 All
- 重現問題。
從這裡下載 Microsoft Visual Studio 和 .NET Framework 記錄收集工具。
執行該工具。 這會將 zip 檔案輸出至 %temp%/vslogs.zip。 請將該檔案附加至您的意見反應。