我們的傳統產品之一是Winforms應用程序,而不是使用後臺線程,它在主UI線程上執行所有操作。它有一個運行在這個主線程上的恆定循環,每20ms調用一次Application.DoEvents()。偶爾應用程序掛在DoEvents調用中。我的問題是如何找出哪些排隊的事件調用代碼掛起?.net掛在Application.DoEvents
P.S.有人知道我可以用來獲取進程中每個線程的堆棧跟蹤的工具嗎?
此外,這隻發生在生產客戶端,我們現在需要修復。沒有可能在客戶端安裝VS。
我們的傳統產品之一是Winforms應用程序,而不是使用後臺線程,它在主UI線程上執行所有操作。它有一個運行在這個主線程上的恆定循環,每20ms調用一次Application.DoEvents()。偶爾應用程序掛在DoEvents調用中。我的問題是如何找出哪些排隊的事件調用代碼掛起?.net掛在Application.DoEvents
P.S.有人知道我可以用來獲取進程中每個線程的堆棧跟蹤的工具嗎?
此外,這隻發生在生產客戶端,我們現在需要修復。沒有可能在客戶端安裝VS。
我發現我一直在尋找的工具。 WinDbg
它可以獲取當前正在運行的Windows進程的堆棧跟蹤。但它確實需要該應用程序的PDB文件。
你可以在Visual Studio中做到這一點,只需附加到進程,中斷執行並打開線程窗口。
菜單:調試 - > Windows的>主題
不幸的是,這將無法正常工作。客戶正在經歷這個問題,我們不能在內部複製它,或者在他們的機器上安裝VS。我將編輯原始問題。 – 2011-05-11 21:29:04
該代碼需要嚴重*重構。 – Tejs 2011-05-11 18:59:31
在調試過程中是否掛起? – Will 2011-05-11 19:00:49
工具被稱爲Visual Studio。您暫停過程,然後轉到「線程」窗口。 – Andrey 2011-05-11 19:03:01