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. java Resource

    ClassPathResource: String resource = ""; //相对路径 Resource resource = new ClassPathResource( ...

  2. CSS3让一段文字多余的用省略号表示,当鼠标移动上去的时候显示全部文字

    <style type="text/css"> div { width:100px; overflow:hidden; white-space:nowrap; text ...

  3. MySQL 5.6查询优化器新特性的“BUG” eq_range_index_dive_limit

    本文转自 http://www.imysql.cn 最近碰到一个慢SQL问题,解决过程有点小曲折,和大家分享下. SQL本身不复杂,表结构.索引也比较简单,不过个别字段存在于多个索引中. CREATE ...

  4. [转载]再来重新认识JavaEE完整体系架构

    移步: http://www.jizhuomi.com/software/644.html

  5. 【PCB】【项目记录】AWG任意波形产生器

    ———————————————————————————————————————————————————————————————————— 原理图V1.0 01.top 已完成原理图绘制,但有相当错误, ...

  6. Java集合类学习笔记(各种Map实现类的性能分析)

    HashMap和Hashtable的实现机制几乎一样,但由于Hashtable是一个古老的.线程安全的集合,因此HashMap通常比Hashtable要快. TreeMap比HashMap和Hasht ...

  7. nodejs 转发websocket (websocket proxy)

    const http = require('http') const server = http.createServer((req, res) =>{ res.end('hello world ...

  8. 关于Thinkphp Upload类

    $this->uploads($picurl); public function uploads($picurl) { $config = array( 'maxSize' => 3145 ...

  9. Makefile 一点一滴(三)—— 尝试简单的变量替换

    上一版的 makefile: TestCpp : ./debug/TestCpp.o g++ -o TestCpp ./debug/TestCpp.o ./debug/TestCpp.o : ./sr ...

  10. IE 文档模式

    <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv= ...