エラー ログに表示されているいくつかのエラーを再現できません。
特定のメソッドが例外をスローしたときにどのレコード ID を使用していたかを知っていれば、はるかに簡単になります。
未処理の例外はすべてグローバル例外ハンドラーによって処理され、例外のすべての詳細と HTTP 要求のすべての詳細がログ テーブルに記録されます。
例外をスローしたメソッドのすべてのパラメーターの値を取得する方法はありますか? またはさらに良いことに、スタック トレースのすべての値は?
エラー ログに表示されているいくつかのエラーを再現できません。
特定のメソッドが例外をスローしたときにどのレコード ID を使用していたかを知っていれば、はるかに簡単になります。
未処理の例外はすべてグローバル例外ハンドラーによって処理され、例外のすべての詳細と HTTP 要求のすべての詳細がログ テーブルに記録されます。
例外をスローしたメソッドのすべてのパラメーターの値を取得する方法はありますか? またはさらに良いことに、スタック トレースのすべての値は?
残念ながら、これは不可能です。ハンドラーで例外をキャッチした時点で、メソッド パラメーターを含むすべてのスタック フレームが失われています。コントロールが関数を離れると、そのパラメーター値にアクセスできなくなります。
クラッシュが発生した特定の関数がわかっているので、そこに例外ハンドラを設定して、対象のすべてのパラメータを収集し、ラップされた例外を再スローすることができます。診断が完了したら、コードを通常に戻すことができます。
void SuspiciousFunction(string name, long count) {
try {
// The code of your function goes here
} catch (Exception e) {
var args = new Dictionary<string,object> {
{ "name" , name }
, { "count", count }
};
throw new MySpecialException(e, args);
}
}
スローされたメソッドで例外をキャプチャし、パラメーターとその他の必要な情報を収集してから、追加情報を含む新しい ApplicationException またはその他のカスタム例外でエラーを再スローします。
ドキュメントEnvironment.StackTraceから、可能だと思います。彼らが言うには
各メソッド呼び出しのスタック トレース情報は、次のようにフォーマットされます。
"で FullClassName. MethodName (MethodParams) in FileName :line LineNumber "