[.NET] CErrStack 方便地管理错误或异常

Option Explicit On
Option Strict On

Imports System.Reflection
Imports System.Diagnostics

Public Structure ErrInfo

    Public Number As Integer
    Public Description As String
    Public Comment As String

    Public ClassName As String
    Public FuncName As String

    Public Sub New(Number As Integer, Description As String, Comment As String, ClassName As String, FuncName As String)
        With Me
            .Number = Number
            .Description = Description
            .Comment = Comment

            .ClassName = ClassName
            .FuncName = FuncName
        End With
    End Sub

    Public Overrides Function ToString() As String
        Dim Msg As String
        If Comment IsNot Nothing Then
            Msg = ClassName & "::" & FuncName & "()" & vbCrLf & _
                  "Err " & Number.ToString & ": " & Description & vbCrLf & _
                  vbCrLf & _
                  Comment
        Else
            Msg = ClassName & "::" & FuncName & "()" & vbCrLf & _
                  "Err " & Number.ToString & ": " & Description
        End If
        Return Msg
    End Function

    Public Sub ShowMsgBox()
        MsgBox(Me.ToString(), MsgBoxStyle.Critical, "Error " & Number.ToString)
    End Sub

End Structure

Public Class CErrStack

    Private m_ErrStack As New Stack(Of ErrInfo)

    Public Function Push(ErrInfo As ErrInfo) As ErrInfo
        m_ErrStack.Push(ErrInfo)
        Return ErrInfo
    End Function

    Public Function Push(Optional Comment As String = Nothing, Optional StackFrameIndex As Integer = 1) As ErrInfo
        Dim ErrObj As ErrObject = Err()
        Return Push(ErrObj.Number, ErrObj.Description, Comment, StackFrameIndex + 1)
    End Function

    Public Function Push(Number As Integer, Description As String, Optional Comment As String = Nothing, Optional StackFrameIndex As Integer = 1) As ErrInfo
        Dim STrace As New StackTrace(True)
        Dim SFrame As StackFrame = STrace.GetFrame(StackFrameIndex)
        Dim tError As ErrInfo
        If SFrame Is Nothing Then
            tError = New ErrInfo(Number, Description, Comment, "UnknownClass", "UnknownMethod")
        Else
            Dim tMethod As MethodBase = SFrame.GetMethod()
            tError = New ErrInfo(Number, Description, Comment, tMethod.ReflectedType.FullName, tMethod.Name)
        End If
        m_ErrStack.Push(tError)
        Return tError
    End Function

    Public Function Push(Err As ErrObject, Optional Comment As String = Nothing, Optional StackFrameIndex As Integer = 1) As ErrInfo
        Return Push(Err.Number, Err.Description, Comment, StackFrameIndex + 1)
    End Function

    Public Function Push(Ex As Exception, Optional Comment As String = Nothing) As ErrInfo
        m_ErrStack.Push(New ErrInfo(Err().Number,
                                        Ex.Message,
                                        Comment,
                                        Ex.TargetSite.ReflectedType.FullName,
                                        Ex.TargetSite.Name))
        Return m_ErrStack.Last()
    End Function

    Public Function Push(Ex As Exception, Number As Integer, Optional Comment As String = Nothing) As ErrInfo
        m_ErrStack.Push(New ErrInfo(Number,
                                        Ex.Message,
                                        Comment,
                                        Ex.TargetSite.ReflectedType.FullName,
                                        Ex.TargetSite.Name))
        Return m_ErrStack.Last()
    End Function

    Public Function Pop() As ErrInfo
        If m_ErrStack.Count = 0 Then Return Nothing
        Return m_ErrStack.Pop()
    End Function

    Public ReadOnly Property Last() As ErrInfo
        Get
            If m_ErrStack.Count = 0 Then Return Nothing
            Return m_ErrStack.Last()
        End Get
    End Property

    Public Function MsgLastErrPop() As ErrInfo
        If m_ErrStack.Count = 0 Then Return Nothing
        MsgLastErrPop = m_ErrStack.Pop()
        MsgLastErrPop.ShowMsgBox()
    End Function

    Public Function MsgLastErr() As ErrInfo
        If m_ErrStack.Count = 0 Then Return Nothing
        MsgLastErr = m_ErrStack.Peek()
        MsgLastErr.ShowMsgBox()
    End Function

    Public Overrides Function ToString() As String
        If m_ErrStack.Count = 0 Then Return Nothing
        Return m_ErrStack.Last().ToString()
    End Function

End Class
时间: 2024-12-14 16:33:26

[.NET] CErrStack 方便地管理错误或异常的相关文章

第六章、管理错误和异常

1.尝试执行代码和捕获异常 ①代码放在try块中. ②紧接着try块写一个或多个catch处理程序来处理可能发生的错误. 2.未处理的异常 如果try块是某个方法的的一部分,那个方法将立即退出,并返回它的调用方法.如果它的调用方法有try块,“运行时”会尝试定位try块之后的一个匹配的catch处理程序并执行.如果调用方法没有try块,或者没有找到匹配的catch处理程序,调用方法退出,返回它的更上一级的调用方法...以此类推. 由内向外遍历了所有调用方法之后,如果还是找不到匹配的catch处理

10 错误和异常 - 《Python 核心编程》

?? 什么是异常? ?? Python 中的异常 ?? 探测和处理异常 ?? 上下文管理 ?? 引发异常 ?? 断言 ?? 标准异常 ?? 创建异常 ?? 相关模块 10.1 什么是异常人们需要一个"柔和"的处理错误的方法, 而不是终止程序. 错误 从软件方面来说, 错误是语法或是逻辑上的. 当 Python 检测到一个错误时, 解释器就会指出当前流已经无法继续执行下去. 这时候就出现了异常. 语法错误 语法错误指示软件的结构上有错误, 导致不能被解释器解释或编译器无法编译. 逻辑错误

Python错误和异常概念

本文和大家分享的主要是python中常见的错误与异常及其相关处理方式,一起来看看吧,希望对大家学习python有所帮助. 1. 错误和异常的处理方式 1.常见的错误 1. a:NameError 2. if True:SyntaxError 3. f = oepn('1.txt'):IOError 4. 10/0:ZeroDivisionError 5. a = int('d'):ValueError 6. 程序运行中断:KeyboardInterrupt 2.Python-使用try_exce

PHP 错误与异常的日志记录

提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 PHP 的 error 日志.虽然看起来是个很简单的问题,但里面其实又牵扯到应用配置以及日志记录位置的问题,如果是在 ubuntu 等系统下使用 apt-get 的方式来安装,其自有一套较为合理的的配置文件可用.再者运行的应用程序中的配置也会影响到日志记录的方式及内容. 错误与异常的区别 关于错误与异常,我们可以用一个简单的例子来理解: <?php try { 1 / 0;

初识Python(8)__Python错误和异常

错误和异常 ################################################################################## 参考:http://blog.csdn.net/fcoolx/article/details/4202872 http://blog.163.com/[email protected]/blog/static/279729562008719384580/ https://docs.python.org/2/library

有关错误与异常的总结

错误和异常的区别(Error vs Exception) 1)  error都是继承自父类java.lang.Error,而exception都继承自java.lang.Exception. 2)  再看看JDK中对于java.lang.Error和java.lang.Exception的解释.    java.lang.Error: An Error is a subclass of Throwable that indicates serious problems that a reason

Python学习笔记七-错误和异常

程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Python检测到一个错误时就出现了异常. 2.异常 当编译器检测到错误并且意识到错误条件.解释器会引发一个异常(程序员也可以自己引发一个异常,后面会说到). 以下是7种Python中常见的错误. 1.NameError,尝试访问一个未申明的例子. 2.ZeroDivisionError,零除错误. 3.

C#高级编程----错误和异常的总结

错误和异常的总结 因为总结吗,,可能概念啥的比较多,大家要学着适应. 首先是C#中的异常用老处理系统级和用户级的错误状态,是一种结构化,统一的类型安全的处理机制. 因为鄙人开始想走C++的道路,所以搞过一段时间的C++,感觉C#还是和C++的异常处理有点区别的. 1.在C#中,所有的异常必须由Exception派生的类类型的实例来表示.在C++中,可以使用任何类型的任何值表示异常. 2.在C#中,利用finally块可编写正常执行和异常情况下都将执行的终止代码.在C++中,很难在不重复代码的情况

PHP 错误与异常 笔记与总结(10)错误处理器测试

关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorHandler.php'; error_reporting(-1); set_error_handler(array('myErrorHandler', 'deal')); //通知级别错误 echo $notice; 运行,在 D:\practise\php\From\notice 生成 noticeLo