8

スタック トレースにテキストをスローできますか?

私のアプリケーションは、スローされた例外を既に把握しています。しかし、いくつかのメソッド (パラメーター) に関する詳細情報が必要です。

アイデアは次のようなことをすることでした

StackTrace.Insert (0, "argument:" + test);

私はこれがクールではないことを知っていますが、それは可能ですか?

4

3 に答える 3

5

@erikHの優れた回答に追加するだけです:

プロパティを使用するDataことに加えて、例外チェーンの上位で使用可能な追加データが必要な場合は、カスタム例外を使用してこれを行うことができます。カスタム型が提供できるメタ情報 ( CommunicationExceptionI/O の問題を意味する場合InvalidStateExceptionや、プログラムが無効な状態に遭遇したことを意味する場合など) に加えて、追加情報を次の形式で例外に追加できます。カスタムフィールド。Dataカスタム フィールドは、プロパティが提供しない型の安全性が必要な場合に特に便利です。

于 2012-09-25T20:04:52.477 に答える
2

定義上、スタック トレースは、プログラムの現在の実行ポイントにあるアクティブなスタック フレームの出力であり、通常は例外を介してアクセスされます。

@David Yaw は、例外スタックをバブルアップするため、スタック トレースに追加情報を追加する正しい方法を提供してくれました。言い換えると、例外の結果である場合にのみ、カスタム データをスタック トレースに追加する必要があります。

ロギング データを格納するための一元的にアクセス可能な List コレクションを作成するか、David が推奨する例外バブリングで適切な try/catch を使用します。

例えば。

try
{
  doSomethingThatMightFailAndThrowAnException();
}
catch (Exception ex)
{
  throw new Exception("Here is some custom data to add to the trace...",ex);
  // Notice adding the ex as the second parameter preserves the original exception trace
}
于 2012-09-25T19:39:21.353 に答える