日期:2014-05-17  浏览次数:20917 次

为什么C#调试器没有直接捕获Win32的异常,而是在output窗口里面显示异常的信息?
平时,C#调试程序(包括NativeCode)的时候,我发现如果某个调用出发了win32的异常,那么代码窗口里面会显示,触发了一个调试错误,提示我们哪一行出的exception。

但是,我今天做了一个实验,在一个C#的控制台程序中调用了一个本地应用程序,这个本地应用程序就是一个自己调用自己的无限递归。我发现调试运行了几秒钟以后,控制台程序正常结束,只是在IDE的output窗口当中显示了捕获一个win32的stackover flow异常。

而我期待的结果是,在调试的过程中,栈溢出的时候,C#的代码窗口里面应该蹦出一个捕捉到了异常的提示,而不是让程序正常退出。

我看了一下我的IDE设置,VS2012在调试状态下我已经设置了Debug->Exception里面,"Win32异常"打了勾了。
-------------------------------------------------------------------------

问题: 什么情况下IDE能显示.net捕获了异常,并在代码窗口显示出来? 什么时候只能在output窗口显示捕捉到了异常呢?

------解决方案--------------------
这种情况应该是对方的dll有Exception的处理机制。
通过使用Trace.TraceError("exception");
可以在output窗口抛出错误信息