我想做一些有点傻的事情。在我Dispose()
的对象方法中,我想为该对象打印一个调试跟踪,告诉我它活着时发生的所有事件。
但是由于这需要时间和金钱,我只想在Dispose()
因为抛出异常而被调用时才这样做。
所以我想做
if (exceptionIsCurrentlyRaised) PrintDebugStuff();
.NET 是否有这样一个我可以查询的 exceptionIsCurrentlyRaised 属性?
我不知道是否存在这样的东西,因为我从未见过它。但听起来你可以只创建一个具有单个 bool 属性的接口。然后,当您在 catch 语句中但在调用 dispose 方法之前设置标志。
我猜这不可能是这么简单的解决方案,但我想我会开始一些想法。
编辑:好的,我还发现这篇有类似问题的 SO 文章:Determine if executed in finally block due to exception being throwing
有趣的问题,但我怀疑这是可能的——至少在没有使用调试或分析 API 进行一些重大黑客攻击的情况下并非如此。
即使您能够调用一些可以让您访问catch
块内当前异常的调试 API,我认为您也无法在finally
块内获取异常(这是您的Dispose
方法将执行的地方)。到那时可能已经处理了异常,因此,就运行时而言,没有异常。
我可以看到是否这样做的唯一方法是注册以收到所有异常的通知,因为你的对象是构造的,并从那里尝试找出异常是否被捕获。这个答案可能会有所帮助:.NET - First chance exception listener for intensive debug?
实际上,这有点像 Visual Studio 2010 的“IntelliTrace”功能,它可以记录调试会话期间您未处于断点时发生的情况。