当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 介绍一个专门处理C++异常的类和例子

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 介绍一个专门处理C++异常的类和例子


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 52 ::
收藏到网摘: n/a

介绍一个专门处理C++异常的类


作者:PJ Naughter


下载源代码和例子


简介:

CExceptionLogger,是一个可以免费使用的C++类,用它可以截获未处理异常,如:非法存取、栈溢出、被零除等,并可以将异常详细信息记录到日志文件。这个类源自于MSDN Magazine 2002年3月的一篇专栏文章“Under the Hood: Improved Error Reporting with DBGHELP 5.1”,该文章的作者是 Matt Pietrek。

特性:

在默认情况下,CExceptionLogger产生一个日志文件,名字为:nameofexe.exception,这里的nameofexe是exe文件的名字。如果以ASCII模式生成CExceptionLogger,则日志文件为一ASCII文件;如果以UNICODE模式生成CExceptionLogger,那么日志文件为一UNICODE文件。日志文件记录的信息包括:

  1. 记录异常发生的日期和时间。
  2. 异常代码。
  3. 如果发生非法存取,则记录该异常的详细信息。
  4. 记录的异常详细信息包括:线性地址、段、偏移量和模块路径。
  5. 进程的全路径名。
  6. 当前Win32工作目录。
  7. 进程的命令行。
  8. 进程ID。
  9. 发生异常的线程ID。
  10. 列举进程中所有的线程(假设ToolHelp32是可获得的),内容包括:
    • 线程ID
    • 优先级和Delta优先级
    • 参考
    • 创建时间
    • Kernel 和 User Time
  11. 列举进程中的模块(同样假设ToolHelp32是可获得的),内容包括:
    • 名字和全路径
    • 全程及每个进程的引用计数
    • 模块句柄
    • 大小
    • 模块完全展开后的所有符号
  12. 所有x86寄存器。
  13. 异常发生的调用堆栈,包括:段、偏移量、模块、函数和行信息。
  14. 日志文件记录的内容还包括每一个堆栈帧(stack frame)以及所有模块、所有变量、所有参数;所有基本数据类型,如:voids, chars, shorts, words, ints, DWORDS, floats, doubles 和 longs。此外日志还记录用户定义的数据类型(UDT)包括结构、联合以及类的信息,再现其成员数据。每种类型都包括名字、地址、类型和值。如果变量是一数组,该数组中的值被完全记录。
版权声明:
  • 你可以在任何以二进制形式发布的产品(包括商业的、共享的、自由的或其它的)中包含此源代码
  • 在不修改每个模块(*.h、*.cpp)最上方版权细则的前提下,你可以用任何方式修改源代码
  • 如果你想要与自己的应用程序一起分发源代码,只允许分发作者最新发布的版本,以便保证源代码的出处是唯一的
使用方法:
  • 编译这个类需要安装2002年11月以后发布的平台SDK。使用时既可以将 ExceptHandler.cpp/h 文件直接添加到C++工程中,也可以用DLL输出异常处理函数类,并用LoadLibrary函数在需要时动态加载DLL。
  • ExceptHandler的二进制版本在XCPTHLR.DLL中提供。此DLL可以从本文最上方链接处下载。
  • 为了在客户机器上运行该代码,必须分发DBGHELP 5.1 动态链接库,这个库可以从2002年11月以后的平台SDK中获得。选择“Install Debugging Tools for Windows”选项安装该DLL。此外,还要注意DBGHELP 动态链接库在最新的 Windows 版本中是受到保护 Windows 系统文件,所以请将 DBGHELP 动态链接库放在与应用程序相同的目录中。
  • 为了在release模式中给代码提供符号,必须按照下列步骤修改工程设置:
    1. Project Settings -> Link -> Debug (Category) , 启用“Debug Info” 并选中“Microsoft Format”。
    2.相同的地方,选中“Separate Types”。
    3. 在相同页的“Projec