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 = ) As ErrInfo
Dim ErrObj As ErrObject = Err()
Return Push(ErrObj.Number, ErrObj.Description, Comment, StackFrameIndex + )
End Function Public Function Push(Number As Integer, Description As String, Optional Comment As String = Nothing, Optional StackFrameIndex As Integer = ) 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 = ) As ErrInfo
Return Push(Err.Number, Err.Description, Comment, StackFrameIndex + )
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 = Then Return Nothing
Return m_ErrStack.Pop()
End Function Public ReadOnly Property Last() As ErrInfo
Get
If m_ErrStack.Count = Then Return Nothing
Return m_ErrStack.Last()
End Get
End Property Public Function MsgLastErrPop() As ErrInfo
If m_ErrStack.Count = Then Return Nothing
MsgLastErrPop = m_ErrStack.Pop()
MsgLastErrPop.ShowMsgBox()
End Function Public Function MsgLastErr() As ErrInfo
If m_ErrStack.Count = Then Return Nothing
MsgLastErr = m_ErrStack.Peek()
MsgLastErr.ShowMsgBox()
End Function Public Overrides Function ToString() As String
If m_ErrStack.Count = Then Return Nothing
Return m_ErrStack.Last().ToString()
End Function End Class

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

  1. Go语言项目的错误和异常管理 via 达达

    Go语言项目的错误和异常管理 最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享. 首先我 ...

  2. Py-上下文管理方法,描述符的应用,错误与异常

    上下文管理方法: 可以在exit里面弄一些内存清理的功能 class Open: def __init__(self,name): self.name=name def __enter__(self) ...

  3. python 常见错误和异常 函数 正则表达式及多线程编程

    生成随机密码#!/usr/bin/env python import stringfrom random import choice def gen_pass(num=9): all_chs = st ...

  4. Python错误和异常概念(总)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6435956.html 本文出自:[Edwin博客园] Python错误和异常概念(总) 1. 错误和异常的处 ...

  5. 关于Python中的错误与异常,你是否了解的够仔细?

    每次版本结束都描述这着同样的错误,相似的问题,但始终没见解决.所以今天,我就来总结下Python的错误与异常! 异常与错误 错误 语法错误 可以通过IDE或者解释器给出提示的错误 opentxt('a ...

  6. Python错误与异常

    1 异常和错误 1.1 错误和异常 从软件方面来说,错误是语法或者逻辑上的,语法错误指示软件的结构上有错误,导致不能被解释器解释.当程序的语法正确后,剩下的就是逻辑错误了,逻辑错误可能是由于不完整或者 ...

  7. python的错误和异常

    python错误和异常 错误 错误分为语法错误和逻辑错误 语法错误 >>> if File "<stdin>", line 1 if ^ Syntax ...

  8. Python错误和异常学习

    一:错误解释 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 代码运行前的语法或者逻辑错误,语法错误在执行前修改,逻辑错误无法修改 二:异常 执行过程 ...

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

    关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...

随机推荐

  1. 基于注解的Spring AOP示例

    基于注解的Spring AOP示例 目录 在XML配置文件中开启 @AspectJ 支持 声明切面及切入点 声明通知 测试 结语 在XML配置文件中开启 @AspectJ 支持 要使用Spring的A ...

  2. bzoj2006: [NOI2010]超级钢琴

    题意:给一个序列(n<=500000),要求选定k个不同区间,使得区间长度在L,R之间,并使得k个区间和之和最大,输出这个最大值. 刚拿到题的时候想的是,对于每个点,如果以它开头,那么之后的L- ...

  3. ObReferenceObjectByName函数调用WIN7下的解决

    <寒江独钓 Windows内核安全编程>第4章键盘的过滤ctrl2cap代码中,ObReferenceObjectByName函数调用: [1]extern POBJECT_TYPE Io ...

  4. javascript选择排序

    function selectionSort(arr){ var index,value; for(var i = 0;i < arr.length;i ++){ index = i; //先记 ...

  5. 如何用python搞定验证码中的噪点

    背景:朋友在为"关山口男子职业技术学校"写一款校园应用,于是找MoonXue写一个学生选课系统的登录接口.为了搞定这个接口,不得不先搞定这个系统的验证码. 验证码大概是这个样子 看 ...

  6. mysql TIMESTAMP 设置为可NULL字段

    今天遇到问题是mysql新建表的时候TIMESTAMP 类型的字段 默认是NOT NULL 然后上网查了一下 发现 很多都说 就是不能为NULL的 这都什么心态 其实设置为空很简单 只要在字段后面加上 ...

  7. Bootstrap<基础十一>字体图标(Glyphicons)

    字体图标(Glyphicons),并通过一些实例了解它的使用.Bootstrap 捆绑了 200 多种字体格式的字形. 获取字体图标 我们已经在 环境安装 章节下载了 Bootstrap 3.x 版本 ...

  8. 数组求和,计算给定数组 arr 中所有元素的总和

    一,题目分析:可以使用数组的归并方法计算,reduce和reduceRight.二者作用几乎相同.只是归并方向相反.reduce和reduceRight都可以接收两个参数.第一个是在每一项上调用的函数 ...

  9. 手把手教你在ubuntu上安装apache和mysql和php

    1:首先安装apache:打开终端(ctrl+Alt+t), 输入命令:sudo apt-get install apache2即可安装, 安装完后,打开浏览器,在地址栏输入:localhost或者h ...

  10. nginx 高并发配置参数(转载)

    声明:原文章来自http://blog.csdn.net/oonets334/article/details/7528558.如需知道更详细内容请访问. 一.一般来说nginx 配置文件中对优化比较有 ...