2

我想做一些有点傻的事情。在我Dispose()的对象方法中,我想为该对象打印一个调试跟踪,告诉我它活着时发生的所有事件。

但是由于这需要时间和金钱,我只想在Dispose()因为抛出异常而被调用时才这样做。

所以我想做

if (exceptionIsCurrentlyRaised) PrintDebugStuff();

.NET 是否有这样一个我可以查询的 exceptionIsCurrentlyRaised 属性?

4

3 回答 3

0

我不知道是否存在这样的东西,因为我从未见过它。但听起来你可以只创建一个具有单个 bool 属性的接口。然后,当您在 catch 语句中但在调用 dispose 方法之前设置标志。

我猜这不可能是这么简单的解决方案,但我想我会开始一些想法。

编辑:好的,我还发现这篇有类似问题的 SO 文章:Determine if executed in finally block due to exception being throwing

于 2010-07-30T00:34:31.700 回答
0

有趣的问题,但我怀疑这是可能的——至少在没有使用调试或分析 API 进行一些重大黑客攻击的情况下并非如此。

即使您能够调用一些可以让您访问catch块内当前异常的调试 API,我认为您也无法在finally块内获取异常(这是您的Dispose方法将执行的地方)。到那时可能已经处理了异常,因此,就运行时而言,没有异常。

我可以看到是否这样做的唯一方法是注册以收到所有异常的通知,因为你的对象是构造的,并从那里尝试找出异常是否被捕获。这个答案可能会有所帮助:.NET - First chance exception listener for intensive debug?

于 2010-07-30T00:36:11.130 回答
0

实际上,这有点像 Visual Studio 2010 的“IntelliTrace”功能,它可以记录调试会话期间您处于断点时发生的情况。

于 2010-07-30T01:38:41.040 回答