2

ちょっとばかげたことをしたい。オブジェクトのDispose()メソッドで、オブジェクトのデバッグ トレースを出力して、オブジェクトが生きている間に発生したすべてのイベントを通知したいと考えています。

Dispose()しかし、これには時間とお金がかかるため、例外がスローされたために が呼び出された場合にのみ実行したいと考えています。

だから私はしたいです

if (exceptionIsCurrentlyRaised) PrintDebugStuff();

.NET には、クエリできる exceptionIsCurrentlyRaised プロパティがありますか?

4

3 に答える 3

0

実際、これはVisual Studio 2010の「IntelliTrace」機能のようなもので、ブレークポイントにいないときにデバッグセッション中に何が起こったかを記録できます。

于 2010-07-30T01:38:41.040 に答える
0

私は見たことがないので、このようなものがあるかどうかはわかりません。しかし、bool プロパティを 1 つだけ持つインターフェイスを作成できるように思えます。次に、catch ステートメント内にいるときに、dispose メソッドを呼び出す前にフラグを設定します。

これほど簡単な解決策はないと思いますが、いくつかのアイデアを始めようと思いました。

編集:わかりました、同様の問題があるこのSO記事も見つけました:例外がスローされたため、最終ブロックで実行しているかどうかを確認してください

于 2010-07-30T00:34:31.700 に答える
0

興味深い質問ですが、これが可能であるとは思えません。少なくとも、デバッグまたはプロファイリング API を使用した大規模なハッキングがなければ不可能です。

ブロック内の現在の例外にアクセスできるデバッグ API を呼び出すことができたとしても、ブロック内 (メソッドが実行される場所)でcatch例外を取得できるとは思いません。それまでに例外は処理されている可能性があるため、ランタイムに関する限り、例外はありません。finallyDispose

これを行うかどうかを確認できる唯一の方法は、オブジェクトが構築されてからすべての例外が通知されるように登録し、そこから例外がキャッチされたかどうかを確認することです。この回答が役立つ場合があります: .NET - 集中的なデバッグのための最初のチャンスの例外リスナー?

于 2010-07-30T00:36:11.130 に答える