2008-11-06 23 views
0

我有一個多線程Windows應用程序偶爾會出現死鎖。這不可避免地發生在客戶系統上,而不是軟件在測試中。獲取當前應用程序狀態的Windows Minidump的最簡單方法是什麼?如果它也可以終止應用程序,那麼用戶可以重新啓動它並繼續使用那個很棒的系統。如何在客戶機器上調試死鎖的Windows應用程序

回答

1

在Vista中,您可以直接從任務管理器創建轉儲文件。右鍵單擊進程選項卡中的進程並選擇'創建轉儲文件'。

在Vista之前,我更喜歡ntsd路由,因爲雖然它不是完全用戶友好的,但它不需要用戶安裝任何其他軟件,而且說明實際上相當容易遵循。

2

請參閱Microsoft支持文章How to use ADPlus to troubleshoot "hangs" and "crashes"以及有幫助的博客文章Debugging Production Applications using ADPlus

這兩篇文章都是關於「ADPlus」的,這是一個隨Windows調試工具提供的VBScript工具,可用於從生產環境(稍後可以在開發機器上使用WinDbg加載)生成小型轉儲。 ADPlus有很多功能和很多選項,因此可能需要一些閱讀,實驗和練習來找到在您的環境中使用它的最佳方式。

+0

ADPlus的障礙在於它需要將軟件安裝在最終用戶機器上。我常見的情況是遠程客戶在其Windows服務器上安裝了敏感數據和關鍵業務服務。他們不太願意安裝額外的軟件。 – davefiddes 2009-09-13 15:03:57

+1

來自http://support.microsoft.com/kb/286350:「ADPlus支持XCOPY部署......此外,ADPlus不要求您在系統上註冊任何自定義組件對象模型(COM)組件。 ,您可以在具有鎖定軟件配置的生產服務器上使用ADPlus。「 我還沒有試過,但你甚至可以將它從閃存驅動器中運行。 – 2009-09-15 14:43:01

1

我知道如何做到這一點。這只是我的技術有點笨重。所有Windows 2000和更高版本的系統都有一個基本的命令行調試程序,作爲名爲NTSD的默認安裝的一部分。我做此刻正在運行:

ntsd -pn MyApp.exe 

當調試器控制檯出現那麼我就可以鍵入以下到調試器控制檯:

.dump c:\my-deadlock.mdmp 
.kill 

我正在尋找的是什麼,有一點更清潔,並且更容易將電子郵件發送給客戶以便運行。我已經看到它暗指某處(谷歌現在找不到),您可以使用drwtsn32.exe來提取崩潰轉儲並終止應用程序。

編輯:可以精簡有些命令:

ntsd -pn MyApp.exe -c ".dump c:\my-deadlock.mdmp; .kill"

命令.detach可以給出,如果進程不是終末雄(如長網絡超時),你想要的過程繼續。

相關問題