有没有办法记录或拦截First Chance Exceptions

时间:2008-11-02 05:15:58

标签: .net exception

如果没有使用分析器,在运行程序中是否有任何方法可以检测到第一次机会异常?理想情况下,我想记录一旦catch块接管最终异常后不可用的更详细的状态信息。

3 个答案:

答案 0 :(得分:19)

我正在谷歌搜索FirstChanceException,两年多后我无法抗拒回答这个问题......

现在,在.net 4.0中,您可以捕获AppDomain的FirstChanceException event。它只是一个事件,所以你无法处理错误,但它似乎是一个很好的,集中的方式来获取有关异常的信息,无论它们是否被处理。在允许catch块处理它之前抛出FirstChanceException事件。我没有找到很多关于它的信息,但除了微软文档之外,更好的资源之一是Mitch Sellers Blog

答案 1 :(得分:2)

我认为在.NET中获取该信息的唯一方法是使用调试器。

否则,您必须自己开发一个解决方案来保存堆栈帧的状态并使用特殊的方法来记录异常。你基本上做的就是内存分析器做的事情,跟踪创建的实例。除非您限制记录的信息量,否则这将是一个巨大的性能损失。

更好的解决方案是使用System.Diagnostics命名空间中的Trace和Assert功能来有选择地跟踪程序状态,或使用日志记录工具(log4net,EnterpriseLibrary,NLog,滚动您自己的简单)来转储线程/ stack / variable信息。

在任何情况下,添加所有这些额外信息都是一个很大的开销。

编辑:我在Feed中收到了有关此项目的消息:NTrace。看起来它更适合你想要做的事情。

答案 2 :(得分:1)

使用Adplus。 它会将一个调试器附加到进程,并在第一次机会被激活时生成(默认情况下)一个小的minidump。 Adplus生成的日志文件还将包含异常信息。只需确保PDB可以看到完整的calstack信息。