代码改变世界

.NET 开发中容易被忽略的问题--MDA

2007-08-15 18:56  Colin Han  阅读(1640)  评论(3编辑  收藏  举报

 

以前,我们的开发人员和测试人员有时会发现一些类似下图的异常。

这些异常的发生往往都是看起来很随机,很难重现的。调用堆栈往往是空的。并且,当程序脱离IDE运行时,都不会发生这些异常。因此,我们经常认为这些异常是IDE的Bug导致。很少在意。(至少我以前是这样)

今天详细的看了一下MSDN中关于MDA的介绍。发现这些问题往往都是很重要的和潜在的问题。比如:PInvokeStackImbalance这个MDA能够帮助我们发现PInvoke的声明有问题。StreamWriterBufferedDataLost这个MDA可以帮助我们发现我们忘记调用StreamWriter.Close()方法。

因为很多MDA异常的触发都是在GC回收时进行的,因此表现比较随机。较难重现。

如果你希望自己控制监视哪些MDA异常,可以使用IDE中的Debug->Exceptions->Managing Debugging Assistants来选择捕获哪些MDA异常。如下图: