回答:
System.Diagnostics
名前空間を見てください。そこにはたくさんのグッズがあります!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
これは、内部で何が行われているのかを知るために少し試してみるのに本当に良いです。
目的を達成できる可能性のあるロギングソリューション(NLog、log4net、Microsoftのパターンやプラクティスエンタープライズライブラリなど)を確認することをお勧めします。頑張って!
代わりの方法は、スタックトレースの文字列表現を返すSystem.Environment.StackTraceSystem.Diagnostics.StackTrace
を使用することです。
別の有用なオプションが使用することです$CALLER
し、$CALLSTACK
Visual Studioでのデバッグ変数を、このアプリケーションを再構築することなく、実行時に有効にすることができるからです。
Environment.StackTrace
新しいのはのインスタンスですStackTrace
。
System.Environment.StackTrace
その情報にアクセスするためのより便利な方法かもしれません。
Environment.StackTrace
いつもはじまるのは面倒じゃないat System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
ですか?誰かが探している時点では、それは現在のスタックトレースの一部ではありません。
これを行うには2つの方法があります。System.Diagnostics.StackTrace()
あなたの現在のスレッドのスタックトレースを与えます。Thread
インスタンスへの参照がある場合、のオーバーロードされたバージョンを介してそのインスタンスのスタックトレースを取得できますStackTrace()
。
スタックオーバーフローの質問を確認することもできます。現在のスレッド以外のスタックトレースを取得するには 。
コードを変更せずにVisual Studioデバッガーでこれを行うこともできます。
もちろん、これは別のマシンでコードを実行している場合には役に立ちませんが、リリースコードに影響を与えたり、プログラムを再起動する必要がなくても、スタックトレースを自動的に吐き出すことができると非常に便利です。
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
出力は次のようになります。
YourNamespace.Program.executeMethod(String msg)で
YourNamespace.Program.Main(String [] args)
メソッドに置き換えConsole.WriteLine
ますLog
。実際、.ToString()
Console.WriteLineケースは受け入れるので、
必要はありませんobject
。しかし、Log(string msg)メソッドにはそれが必要な場合があります。
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
私のために働くようです
StackTrace
ある遅い犬ので控えめにそれを使用します- 。