记录.NET中发生的所有异常

时间:2013-09-13 15:56:23

标签: vb.net

我有很多代码是从我正在研究的旧winforms项目中编写的。我最近创建了一种方法来记录在几个try / catch块中发生的错误(到数据库)。有没有一种方法可以在应用程序移动以捕获ex作为异常时将整个应用程序添加到应用程序中,或者如果异常以某种方式未处理,而不是将其添加到我的所有try / catch块中?

我的方法是由数据集设计者创建的,用于在我的数据库中的“错误表”中插入一行,如下所示:

tbladapter.LogError("TRY/CATCH", ex.Message & ";;;; " & ex.InnerException.ToString, My.Application.UserID, Now)
Msgbox("Tell genius he needs to learn how to expect and handle errors!")

3 个答案:

答案 0 :(得分:3)

是的,您可以捕获所有异常,即使它们被try / catch块捕获也是如此。您可以通过处理当前FirstChanceException的{​​{1}}事件来执行此操作。要做到这一点,当您的应用程序启动时,请调用AppDomain,如下所示:

AddHandler

这是一个示例处理程序方法:

AddHandler AppDomain.CurrentDomain.FirstChanceException, AddressOf FirstChanceExceptionHandler

另外,我应该提一下,使用Private Sub FirstChanceExceptionHandler(sender As Object, e As System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs) Console.WriteLine(e.Exception.ToString()) End Sub 通常不赞成回归VB6。 MsgBox是更好的选择。此外,您可能不知道在大多数异常中简单地调用MessageBox.Show将显示消息,源,堆栈跟踪以及所有内部异常的消息。调用ToString比访问所有这些单独的属性更容易。

答案 1 :(得分:0)

在Windows窗体应用程序中,您可以挂钩的ThreadException上有Application个事件。只要应用程序中发生异常,此方法就会运行。

在创建表单的类(可能是Program.vb?)中,您可以添加类似

的内容

Application.ThreadException += New ThreadExceptionEventHandler(form1.someHandler)

在您的表单中处理它。

答案 2 :(得分:0)

我刚刚在Web项目中实现了类似的功能,并使用了企业库中的异常处理块功能

有一个很好的起点here,我相信你可以找到其他人。

从内存中我认为这很容易实现,因为我是从输出中自动创建支持票据。