NullReferenceException
のスタックトレースは非常に意味がなく、メソッド名とコールスタックだけが含まれています。メソッド内の変数はnullでもかまいません。また、バグがdevマシン上で再現できないときは、デバッグするのは難しいです。NullReferenceExceptionの変数名を取得する
おそらく、変数名を取得して、そのエラーの詳細を取得する方法を知っていますか?それとも、デバッグするためのより良い方法がありますか?
NullReferenceException
のスタックトレースは非常に意味がなく、メソッド名とコールスタックだけが含まれています。メソッド内の変数はnullでもかまいません。また、バグがdevマシン上で再現できないときは、デバッグするのは難しいです。NullReferenceExceptionの変数名を取得する
おそらく、変数名を取得して、そのエラーの詳細を取得する方法を知っていますか?それとも、デバッグするためのより良い方法がありますか?
その名前を追跡することは、必ずしも可能ではない(表現であってもよい)。
可能な場合は、許容できないオーバーヘッドが発生します。ランタイムは、コストがかかり、あらゆる種類の最適化を禁止する、ほとんどすべての参照変数を追跡する必要があると考えてください。
また、Inspect the managed stackの私の答えとそれが参照するブログの投稿を参照してください。
簡単な解決策は、独自のコードをチェックインするより一貫性のヌルで構築することです:
void Foo(Bar b)
{
if (b == null) throw new ArgumentNullException(nameof(b));
...
}
後でデバッグする際にサニティチェックのためだけに 'Debug.AssertNonNull'(または何でもすべき)をインクルードすると特に便利です。 –
デバッグ状態のオーバーヘッドの問題は何ですか? –
あなたは変数名を取得することはできません。例外が発生した行を特定することができます。 – Alex
@Alexはい。ただし、.pdbファイルを配布する必要がある運用環境では、これにより、難読化ツールの使用も防止されます。 – Elmo
@Elmoそれでは幸運。難読化ツールを使用している場合は、スタックトレースが不要になります。 –