2013-05-09 185 views
0

我有一個龐大的計劃,寫於2008年VB,涉及很多自制的DLL文件,socket通信,多線程等VB 2008的程序崩潰與System.ObjectDisposedException

有時候,突然冒出來,程序崩潰與在事件查看器以下細節: CLR20r3 不可 CMS.exe 1.0.0.0 5177cc90 的mscorlib 2.0.0.0 4a275af7 System.ObjectDisposedException

我做功課,試圖找出這個問題,但我不能確切地查明它可能會在(有行代碼的hundreads數千本次大會)。我把一個Handler捕獲在main()中的任何UnHandledException,但它似乎根本不會觸發。

我的問題是,我怎麼能調試這VS外面?該軟件安裝在我們客戶倉庫的生產工業PC上,因此我們無法安裝VS,原因很明顯。

任何提示將非常感激。

感謝您的寶貴時間,並幫助

+0

我的水晶球說,你寫了Application.UnhandledException事件處理程序。錯了,你需要AppDomain.CurrentDomain.UnhandledException。對於讓我們猜測這個順便說一句,沒什麼意義,總是發佈一段代碼。 – 2013-05-09 13:46:19

+0

公用Sub主() 昏暗currentDomain作爲應用程序域= AppDomain.CurrentDomain 的AddHandler currentDomain.UnhandledException,AddressOf MyHandler的 .... 私人小組MyHandler的(BYVAL發件人爲對象,BYVAL ARGS作爲UnhandledExceptionEventArgs) 昏暗È作爲異常= DirectCast(args.ExceptionObject,異常) m_eLog.WriteEntry( 「X-ACTIM UnHandledException:」 &e.ToString) 結束小組 – Dominic 2013-05-09 19:53:52

回答

0

處理System.Windows.Forms.Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException做的伎倆在案件的80%(可悲的是,像COM錯誤一些錯誤就不會被抓)。

在可以例如轉儲到日誌文件中的異常消息和異常堆棧跟蹤這樣的事件。 如果您提供與您的應用程序的pdb文件,你將能夠看到在堆棧跟蹤的行號,提供調試它的好方法。

+0

感謝您的答覆 是否AppDomain.UnhandledException處理程序也陷入可能發生的異常一個DLL的參考?啓動時軟件加載了大約50個DLL。我確實把處理程序放在main()中,這顯然是整個解決方案的入口點。 如何轉儲異常堆棧跟蹤? – Dominic 2013-05-09 20:03:01

+0

是的。它確實能夠捕獲您的應用程序或加載的任何動態庫所捕獲的任何異常(注意:COM組件不是由您的應用程序直接處理的)。假設「ex」是你的異常,你應該記錄ex.Message,ex.StackTrace,ex.Source和ex.InnerException的相同東西(如果有多個異常) – Jamby 2013-05-10 07:52:38

+0

我不明白的是我的異常處理程序是NEVER執行。從事件查看器中只有跟蹤是應用程序崩潰。所以你有一個想法,爲什麼我的處理程序永遠不會被觸發?我認爲也許這個異常來自許多DLL的加載(所有.Net程序集)之一,但你說它應該抓住它們。我很困惑 – Dominic 2013-05-13 12:52:19