2011-05-11 26 views
3

我們的傳統產品之一是Winforms應用程序,而不是使用後臺線程,它在主UI線程上執行所有操作。它有一個運行在這個主線程上的恆定循環,每20ms調用一次Application.DoEvents()。偶爾應用程序掛在DoEvents調用中。我的問題是如何找出哪些排隊的事件調用代碼掛起?.net掛在Application.DoEvents

P.S.有人知道我可以用來獲取進程中每個線程的堆棧跟蹤的工具嗎?

此外,這隻發生在生產客戶端,我們現在需要修復。沒有可能在客戶端安裝VS。

+7

該代碼需要嚴重*重構。 – Tejs 2011-05-11 18:59:31

+0

在調試過程中是否掛起? – Will 2011-05-11 19:00:49

+1

工具被稱爲Visual Studio。您暫停過程,然後轉到「線程」窗口。 – Andrey 2011-05-11 19:03:01

回答

0

我發現我一直在尋找的工具。 WinDbg

它可以獲取當前正在運行的Windows進程的堆棧跟蹤。但它確實需要該應用程序的PDB文件。

2

你可以在Visual Studio中做到這一點,只需附加到進程,中斷執行並打開線程窗口。

菜單:調試 - > Windows的>主題

+0

不幸的是,這將無法正常工作。客戶正在經歷這個問題,我們不能在內部複製它,或者在他們的機器上安裝VS。我將編輯原始問題。 – 2011-05-11 21:29:04