2013-05-09 186 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