在我们编写程序的时候可通过IDE自带的调试环境捕捉到异常(Except)错误,并能查看到相关的信息以便我们修正程序中的问题。但当软件被发布出去后,因为所部署运行的环境与我们的调试环境有很大区别,即使在是调试环境中测试过非常完美的程序,也很难保证在实际运行中不出现任何错误。当程序发生错误它往往是抛出一个红叉的警告框来告诉我们它出错了,但这对我们来说却像是一个不懂表达的小孩,只是一味的告诉你它身上疼,却不懂得告诉你它哪里疼、怎么样疼。幸好有一个叫ExWatcher的组件能够教会你的小孩怎么说出它身上的疼痛。

ExWatcher组件专门用来捕捉程序异常,并记录异常发生的位置和Call Stack信息,和我们常用的Application.OnException不同,它替换了程序的异常处理函数并把异常分为DelphiException、DelphiSafeCallException、SystemException、SystemSafeCallException四类,并为这四类异常提供不同的回调函数。同时它是基于SEH(Structured Exception Handling)的,需要使用dbg文件,也就是说需要把与程序同名的dbg文件一齐发布。

有关ExWatcher的实现原理请参见以下文章:
Advanced exception handler to find the exception source file name, call stack and all other related information

Advanced exception handler to find the exception source, call stack and more

ExWatcher的下载地址:http://www.clevercomponents.com/articles/article012/ExWatcher.zip
DEMO程序下载:http://www.clevercomponents.com/articles/article012/Demo.zip

要生成dbg文件,需一个小工具map2dbg,它能够将Dephi的MAP文件转换成dbg格式文件,要生成MAP文件请修改project  ->  options  ->  Linker  ->  Map   file 选择detailed,或者在需要的地方加入编译指令{$D+,L+} 。

map2dbg下载地址:http://code.google.com/p/map2dbg/

生成不了map时,请删除dproj文件后,用IDE打开dpr,由IDE重建dproj。

http://blog.csdn.net/nhconch/article/details/3859394

在程序异常中记录堆栈信息(使用ExWatcher)的更多相关文章

  1. C++异常中的堆栈跟踪

    C++语言的运行时环境是基于栈的环境,堆栈跟踪(trace stack)就是程序运行时能够跟踪并打印所调用的函数.变量及返回地址等,C++异常中的堆栈跟踪就是当程序抛出异常时,能够把导致抛出异常的语句 ...

  2. Win下,通过Jstack截取Java进程中的堆栈信息

    在Java软件的使用过程中,有时会莫名的出现奇怪的问题.而这些问题常常无法使用日志信息定位,这时我们就需要通过查看进程内部线程的堆栈调用关系来分析问题出在哪里. 举个例子,当我们在做某个操作时,莫名的 ...

  3. Logger.error方法之打印错误异常的详细堆栈信息

    一.问题场景 使用Logger.error方法时只能打印出异常类型,无法打印出详细的堆栈信息,使得定位问题变得困难和不方便. 二.先放出结论 Logger类下有多个不同的error方法,根据传入参数的 ...

  4. log4j打印错误异常的详细堆栈信息

    一.问题场景 使用Logger.error方法时只能打印出异常类型,无法打印出详细的堆栈信息,使得定位问题变得困难和不方便. 二.先放出结论 Logger类下有多个不同的error方法,根据传入参数的 ...

  5. 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

    http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...

  6. java Exception 出错的栈信息打印到日志中 打印堆栈信息

    我们在开发程序的过程当中,日志是必不可少的工具,这有助于我们分析问题的原因,和出错的详细信息,而java的异常机制又会方便且迅速的帮我们找到出错行的位置. try { .... } catch (Ex ...

  7. 打印Java异常堆栈信息

    背景 在开发Java应用程序的时候,遇到程序抛异常,我们通常会把抛异常时的运行时环境保存下来(写到日志文件或者在控制台中打印出来).这样方便后续定位问题. 需要记录的运行时环境包含两部分内容:抛异常时 ...

  8. Log4Net异常日志记录在asp.net mvc3.0的应用

    前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...

  9. Log4Net异常日志记录在asp.net mvc3.0的应用(转载)

    这篇博客写的很好:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html 前言 log4net是.Net下一个非常优秀的开源 ...

随机推荐

  1. ios改变系统默认样式

    iso系统下默认不能修改submit样式,于是加上如下属性就可以修改: -webkit-appearance:none; -moz-appearance:none; 先记录下.

  2. Python之路Day7

    第7天主要是面向对象的内容. 学到现在越来越吃力了,从上节课开始博客就没时间写了,看看别人写的博客都那么棒.又想起了那句话比你牛逼的人都在努力,你却在放羊...唉,我写作业的效率有点低,以后得抓紧时间 ...

  3. Python 迭代器、生成器、递归、正则表达式 (四)

    一.迭代器&生成器 1.迭代器仅仅是一容器对象,它实现了迭代器协议.它有两个基本方法: 1)next 方法 返回容器的下一个元素 2)_iter_方法 返回迭代器自身.迭代器可以使用内建的it ...

  4. 转:DNS拾遗

    最近帮朋友注册域名配置主机,碰到一些DNS上的一些概念,惭愧于有一些东西已经忘记是啥意思,于是决定重新学习一下DNS方面的基本概念. 常用概念: TTL: TTL为Time to live的缩写,网络 ...

  5. 基于visual Studio2013解决算法导论之042单源最短路径

     题目 单源最短路径 解决代码及点评 // 26单源最短路径bellmanford.cpp : 定义控制台应用程序的入口点. // #include <iostream> #incl ...

  6. 基于visual Studio2013解决C语言竞赛题之0513字符拷贝

     题目 解决代码及点评 /************************************************************************/ /* 13. 将字符数 ...

  7. CF(435D - Special Grid)dp

    题目链接:http://codeforces.com/problemset/problem/435/D 题意:求三角形个数,三个点必须的白点上,而且三条边必须是横线,竖线或对角线,三条边上不同意出现黑 ...

  8. BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )

    从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include< ...

  9. BZOJ 3011: [Usaco2012 Dec]Running Away From the Barn( dfs序 + 主席树 )

    子树操作, dfs序即可.然后计算<=L就直接在可持久化线段树上查询 -------------------------------------------------------------- ...

  10. CentOS 如何安装git server + Gitolite 【配置不成功需要再测试2015-8-20】

    安装git 关于安装git  可以参考 http://gitolite.com/gitolite/install.html 里面有官方的介绍 1. Git 的工作需要调用 curl,zlib,open ...