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