Exception.Data 为异常添加更多调试信息
来源:互联网 发布:东海航空 知乎 编辑:程序博客网 时间:2024/05/18 00:51
我们抛出异常是为了知道程序中目前的状态发生了错误。为了能够知道错误的详细信息便于我们将来避免产生这样的错误,我们会选用合适的异常类型,在异常中编写易于理解的 message 信息。但是有时我们需要更多的信息进行调试才能帮忙在将来避免这个异常。
System.Exception
类中就自带了这样的属性 Data
,它是 IDictionary
类型的:
public virtual IDictionary Data { [System.Security.SecuritySafeCritical] // auto-generated get { if (_data == null) if (IsImmutableAgileException(this)) _data = new EmptyReadOnlyDictionaryInternal(); else _data = new ListDictionaryInternal(); return _data; }}
别问我为什么把括号放最右边,那是微软自己写的源码 点击这里查看
最近在调试 .Net Framework 内部代码的异常时就发现微软就是使用这个属性储存异常的更多细节的:
internal void RegisterStylusDeviceCore(StylusDevice stylusDevice){ lock (__stylusDeviceLock) { int stylusDeviceId = stylusDevice.Id; // The map must contain unique entries for each stylus device. if (__stylusDeviceMap.ContainsKey(stylusDeviceId)) { InvalidOperationException ioe = new InvalidOperationException(); // We add a tag here so we can check for this specific exception // in TabletCollection when adding new tablet devices. ioe.Data.Add("System.Windows.Input.StylusLogic", ""); throw(ioe); } __stylusDeviceMap[stylusDeviceId] = stylusDevice; }}
以上代码出自 .Net Framework 4.6 的 System.Windows.Input.StylusLogic
类型,http://referencesource.microsoft.com 里 .Net Framework 4.7 中找不到。
需要注意的是,Exception
的 ToString()
方法并不会把这个字典转成字符串的任意一个部分;所以,如果需要在日志中记录程序中全局捕获的异常,需要自己去遍历异常中的 Data
的每一项。不过,为了解决掉更多的程序错误,我们记录日志的时候不已经写了更多的信息(比如 InnerException
)了吗?
阅读全文
1 0
- Exception.Data 为异常添加更多调试信息
- jQuery添加更多信息
- CAS 添加更多信息配置
- 调试 -- 为GUI程序添加控制台调试信息输出
- 根据exception 异常堆栈信息
- C# 为应用添加自动更新和运行异常信息捕获
- 为 VC6 程序的 Release 版本添加调试信息
- 为 VC6 程序的 Release 版本添加调试信息
- 24 Python assert,Exception的异常信息为unicode的中文时
- Exception信息转换为字符串,或者直接将使用Log4j进行异常记录
- xcode获取更多崩溃调试信息
- 使用 StackTrace 获得更多跟 Exception 有关的信息
- ffmpeg 调试信息 添加
- 用SetMenuInfo 为菜单添加更多特性
- 美化ubuntu:为ubuntu添加更多字体
- 为 Bootstrap 添加更多自定义图标
- 为bootstrap添加更多自定义图标
- jsp exception对象获取异常信息
- 论文笔记:TextBoxes: A Fast Text Detector with a Single Deep Neural Network
- maven入门
- 搭建PHP开发环境(二)-PHP安装
- Object.defineProperty()的set方法除了用于双向绑定还能干嘛?
- faster-rcnn小刀
- Exception.Data 为异常添加更多调试信息
- js 获取页面宽度和高度
- curses库(LINUX/UNIX图形函数库)
- maven管理java项目
- 初识大数据
- 使 32 位程序使用大于 2GB 的内存
- Spring JDBC 示例
- 大理石在哪儿 where is the Marble?
- 38. Count and Say