2013-10-17 86 views
0

我正在尋找一些關於win32異常「創建窗口句柄錯誤」的幫助。 我們的程序(WinForms - C#)有時會拋出這個異常,有時窗口甚至會凍結,所以用戶必須啓動進程才能重新運行。如何找到win32異常源「創建窗口句柄錯誤」

從關於這個問題的許多其他線索,我知道我應該尋找什麼,但不是在那裏,因爲我們的程序是相當大的。所以我希望有一種方法可以限制我要檢查的代碼行......是否有任何工具可以幫助解決這個異常問題?

回答

0

短暫更新:我解決了這個問題。

ProcDump對我的幫助不大,因爲我從我們的日誌文件中獲得了相同的信息。但是,我能夠在我們的開發環境中重現錯誤。感謝調試器並在taskmanager中顯示用戶對象計數,我發現memoryleak的來源 - 一個動態創建的未配置的texbox。

再次感謝提示!

0

如果在調試器內部發生這個問題,您可以設置調試器(我將假設您使用C#的Visual Studio)來拋出異常。在你的情況下,你會想設置一個異常斷點(我認爲)System.ComponentModel.Win32Exception

再次假定Visual Studio爲IDE,在「Debug」菜單中是「Exceptions ...」項目。這允許你告訴調試器在特定異常被拋出時或者在未處理時拋出。

在公共語言運行時異常下,展開System.ComponentModel,並啓用投擲列中的複選框System.ComponentModel.Win32Exception

然後就照常進行。如果在調試期間發生異常,它應該闖入你的程序並讓你看到它發生的地方。

編輯:如果您不能重現您的開發機器上的問題,看看您是否能夠建立目標機器時發生崩潰時產生轉儲。一種做法是運行ProcDump。如果發生異常,請使用-e參數運行它以創建轉儲。然後你可以在牧場分析這件事。

+0

嗨,感謝您的回答,是的,我使用的是Visual Studio 2012. 但是,我還沒有能夠在我們的本地計算機上重現問題,並且我們沒有任何管理員權限用戶在那裏安裝工作室。 但我會繼續嘗試重現錯誤 - 這次使用正確配置的調試器。感謝提醒,我已經完全忘記了這個選項在我所有的(絕望)嘗試獲取這個... – Sue

+0

我已經添加了一些信息,可以_may_幫助,關於創建一個小型轉儲,你可以分析以後的時間。 – icabod

+1

ProcDump的'-e'命令行參數只會在未處理的異常情況下寫入一個minidump。鑑於大多數C#代碼的性質,未處理的異常很少。您可能想使用'-e 1'來代替首次機會異常的小型轉儲。請注意,這可能會產生** lot **的小型轉儲。 – IInspectable