【发布时间】:2012-06-18 20:47:26
【问题描述】:
DebuggerHidden 非常方便标记辅助方法,确保未处理的异常在方便的地方停止调试器:
不幸的是,这似乎不适用于迭代器块:
(如果是这样,调试器会将in 显示为第二个示例中的当前语句)。
虽然这显然是 Visual Studio 的一个限制(我已经 submitted a report),但有没有什么方法可以解决这个问题,同时仍然使用迭代器块?
我猜这是因为编译器生成的实现迭代器的代码没有用[DebuggerHidden] 标记。也许有一些方法可以说服编译器这样做?
【问题讨论】:
-
我不太理解您以这种方式隐藏异常的设计决定。我可以看到可能发生的两种情况:1)您正在编写一个供其他开发人员使用的库。在这种情况下,它们没有您的源,并且在 VS 中,最低可见堆栈级别将是 ThrowIterator。所以这是你一开始想要的。 2) 此代码仅供您的团队在内部用于您的项目。在这种情况下,你为什么要让一个未捕获的异常就这样溜走而不去处理呢?万一它被抛出了,即使在调试的时候,你实际上也想看到它在 ThrowIterator 中,并且大多数 imp
-
当然,我为什么使用这个功能并不重要。它就在那里,我只是想看看如何让它在所有情况下都能正常工作。
-
但是如果你很好奇,可以考虑一个
PerformQuery方法,如果参数没有意义就会抛出。它仅供我们团队内部使用。该异常未被捕获,因为它是一个调试版本,专门避免捕获异常只是,以便 Visual Studio 在正确的位置停止。如果项目刚刚以通用的“出现问题”消息结束,那会不会只会使调试变得不必要地困难?我们知道有一个错误,还不如停在正确的行! -
那么这肯定是一个艰难的过程。不确定您是否可以利用迭代器生成的代码。很可能不会。
标签: c# visual-studio-2010 debugging visual-studio-debugging