我比較偏好用 Microsoft Sysinternals Process Monitor 看每一資源存取了甚麼
Windows 桌面應用程式無回應且無 Crash Report 時,如何擷取 Dump 並排查死鎖與資源爭用?
當 Windows 桌面應用程式出現無回應(凍結)但未有自動關閉或產生 Crash Report 時,我們如何透過 Windows 工作管理員(Task Manager)或 ProcDump 擷取完整的進程 Dump(Process Dump),並利用 WinDbg 分析以識別死鎖(Deadlock)、卡死的線程(Blocked Threads)、資源爭用(Resource Contention)或無回應的相依性服務(Unresponsive Dependencies)?
Windows for business | Windows 365 商務版
-
Harry Phan 34,365 信譽點數 獨立顧問2026-10-15T09:22:04.6633333+00:00 您好,
當 Windows 應用程式凍結且未產生崩潰報告時,請在應用程式無回應時擷取進程轉儲。開啟任務管理器,導覽至“詳細資料”,以滑鼠右鍵按一下受影響的進程,然後選擇“建立轉儲檔案”;Windows 將顯示已儲存的檔案路徑。或者,下載「Microsoft Sysinternals ProcDump」,並以管理員身分執行命令提示字元。執行“procdump.exe -ma <PID> C:\Dumps\app_hang.dmp”,確保目標資料夾存在。若要在視窗停止回應時自動擷取轉儲,請使用“procdump.exe -ma -h <ProcessName.exe> C:\Dumps”。間隔幾秒鐘收集兩到三個轉儲,以識別持續阻塞的線程。在 WinDbg.
中開啟轉儲文件,並執行
.symfix、.reload、!analyze -hang和~* kb指令來檢查執行緒狀態和呼叫堆疊。尋找循環鎖定依賴、臨界區等待、RPC 或 COM 呼叫以及阻塞的網路或檔案操作。對於 .NET 應用程序,請使用 SOS 命令(例如!threads和!syncblk)來調查託管執行緒阻塞和同步爭用。將轉儲結果與應用程式日誌和 Windows 事件檢視器進行對比,並保護轉儲文件,因為它們可能包含敏感資訊。希望這些資訊對您有所幫助。如果此答案能幫助您更深入地了解問題,請採納。如果您還有其他問題,歡迎留言。祝您一切順利!
HP.