以前讨论过有关重新抛出异常的正确方法。相反,这个问题是关于如何在使用rethrow时从Visual Studio中获得有用的行为。C#重新抛出异常:如何在IDE中获取异常堆栈?
考虑以下代码:
static void foo() {
throw new Exception("boo!");
}
static void Main(string[] args) {
try {
foo();
} catch (Exception x) {
// do some stuff
throw;
}
}
散发出来具有正确的堆栈跟踪,显示FOO()作为该异常的源的异常。 但是,GUI调用堆栈窗口只显示Main,而我期待它显示异常的调用堆栈,直到foo。
当没有重新抛出时,我可以使用GUI非常快速地导航调用堆栈,以查看哪个调用导致异常以及我们如何到达那里。
随着rethrow我想能够做同样的事情。相反,GUI显示的调用堆栈对我没有用处。我必须将异常详细信息复制到剪贴板,将其粘贴到记事本,然后手动导航到我感兴趣的调用堆栈的任何功能。
顺便说一句,如果我添加[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
或者如果我将捕获量更改为catch (Exception)
。
我的问题是:鉴于我使用的代码重新抛出,有人可以建议一种方便的方式来导航与异常相关联的调用堆栈吗?我使用Visual Studio 2010中
为什么要重新抛出异常?在这里没有包含`catch`子句中的更多代码吗?否则,我认为你的解决方案是简单地没有发现异常。 – 2010-12-04 01:14:50
罗伯特,这是一个最小的片段来说明问题。实际的代码在重新推出之前做了一些工作。 – redtuna 2010-12-04 01:19:14