相关疑难解决方法(0)

应用程序级全局异常处理程序没有被命中

通过订阅 AppDomain.Current.Domain UnhandledException 事件,我的 .net 应用程序有一个全局异常处理程序。有几次我看到我的应用程序崩溃了,但这个全局异常处理程序永远不会被命中。不确定它是否有帮助,但应用程序正在执行一些 COM 互操作。

我的理解是,只要我没有任何本地 catch 块吞下异常,就应该始终命中这个全局异常处理程序。关于我可能遗漏了什么导致这个处理程序从未被调用的任何想法?

c# exception-handling

5
推荐指数
1
解决办法
1940
查看次数

未处理的异常未被AppDomain.UnhandledException捕获

我们有一个.NET 3.5程序集(dll)由VB6"代理"(exe)通过COM接口执行.VB6代码确实调用:

' Ensure that no system dialog comes up when we GPF.
PreviousErrorMode = SetErrorMode(SEM_NOGPFAULTERRORBOX)
SetErrorMode PreviousErrorMode Or SEM_NOGPFAULTERRORBOX

' Assign our Exception Handler for this process.
PreviousExceptionFilter = SetUnhandledExceptionFilter(AddressOf UnhandledExceptionFilter)
Run Code Online (Sandbox Code Playgroud)

VB6 UnhandledExceptionFilter将异常转换为VB6引发的错误.(但是这里也没有被调用,这个VB6代码多年来没有被改变 - 甚至没有被重新编译过.)

在由VB6代码创建的第一个.NET对象的构造函数中,我添加了一个处理程序AppDomain.CurrentDomain.UnhandledException(并且,为了调试此问题,我添加了一个for Windows.Forms.Application.ThreadException,但它没有帮助,不是我们有任何无论如何,由.NET显示的UI).

我确信UnhandledException在VS2008中开发此代码时事件已经抓住了,但我不确定我是否已在VS2015中看到过它.

代码运行多个线程,其中一些执行主要目的,包括插入和更新SQL Server数据,以及通过TCP协议进行通信,TCP协议由其他线程处理,包括a BackgroundWorker.

执行主要目的的人是:

taskThread = New Thread(AddressOf EnsureTaskCompletes)
taskThread.SetApartmentState(Threading.ApartmentState.STA)
taskThread.Start()
Run Code Online (Sandbox Code Playgroud)

向你展示更多的代码是太专有和复杂了,但我在调试这个问题的同时调整了代码,而Throw New Exception不是最终具有相同效果的复杂代码.(*)

这个"简单"的异常没有被处理过,UnhandledExceptionHandler并且只是默默地终止了程序,除了我打开了非托管调试.

AppDomain.CurrentDomain.UnhandledException当.NET Framework"仅"作为dll加载时,是否存在记录的更改行为?

(因为COM重新注册的,我不想打造VS2008以前的版本尚未确认有一个行为改变.我已经确认了.NET 3.5 的Exe由创建一个VS2015编译Thread抛出未处理的异常处理 …

.net vb6 multithreading unhandled-exception

2
推荐指数
1
解决办法
366
查看次数