- 1. 概要
- 2. 記述
- 3. 備考
1. 概要
デバッグ出力時に、その箇所が誰から呼ばれたものかは、重要です。
それを出力するのは、「StackTrace」になります。
2. 記述
ここでは、ログ出力の箇所を単に「Console.WriteLine()」で記述していますので、ご注意。
全部出力するのであれば。
using System.Diagnostics;
StackTrace stackTrace = new StackTrace();
StackTrace stackTrace1 = new StackTrace(new StackFrame(true));
Console.WriteLine(" Stack trace for Main: " + stackTrace.ToString());
Console.WriteLine(stackTrace1.ToString());
まぁ、これは、ネストが深いと、何行出力されるやら、なにがなにやら・・・てな感じになることが多いです。
上より、行が長くなりますが、こういう書き方もできます。
StackTrace stackTrace = new StackTrace(true);
for (int i=0; i<stackTrace.FrameCount; i++)
{
StackFrame stackFrame = stackTrace.GetFrame(i);
Console.WriteLine(stackFrame.GetMethod() +" "+ stackFrame.GetFileLineNumber());
}
後ろに行番号をいれていますが、最適化されているのか?
0 で出力されることが多いです。
「GetFrame()」内の番号が、小さいほど、自分に近いことになるようです。
全部出すとわけわかんなくなるので、「for」のカウンタ最大値を小さめにしておけば、呼び出しに近い何個かを出力することができます。
3. 備考
本ページは、下記のサイトを参考にさせていただきました。
「StackTrace クラス (System.Diagnostics) 」
|
|