通常のC#コードがあります。 例外はありませんデバッグのために、現在のスタックトレースをプログラムで記録したい。例:
public void executeMethod()
{
logStackTrace();
method();
}
System.Diagnostics
名前空間をご覧ください。たくさんのグッズがあります!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
これは、ボンネットの下で何が起こっているのかを知るために突っ込んでいるのは本当に良いことです。
目的に応じていくつかのロギングソリューション(NLog、log4net、Microsoftパターンおよびプラクティスエンタープライズライブラリなど)を確認することをお勧めします。がんばろう!
System.Diagnostics.StackTrace
の代わりに System.Environment.StackTrace を使用して、スタックトレースの文字列表現を返します。
別の便利なオプションは、$CALLER
および$CALLSTACK
Visual Studioの変数のデバッグ を使用することです。これは、アプリケーションを再ビルドせずにランタイムで有効にできるためです。
これを行うには2つの方法があります。 System.Diagnostics.StackTrace()
は、現在のスレッドのスタックトレースを提供します。 Thread
インスタンスへの参照がある場合は、StackTrace()
のオーバーロードバージョンを介して、そのスタックトレースを取得できます。
Stack Overflowの質問現在のスレッドのスタックトレースを取得する方法も確認してください。
コードを変更せずにVisual Studioデバッガーでこれを行うこともできます。
もちろん、別のマシンでコードを実行している場合、これは役に立ちませんが、リリースコードに影響を与えずに、またはプログラムを再起動する必要もなく、スタックトレースを自動的に吐き出すことができると非常に便利です。
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
出力は次のようになります。
yourNamespace.Program.executeMethod(String msg)で
yourNamespace.Program.Main(String [] args)
Console.WriteLine
をLog
メソッドに置き換えます。実際、object
を受け入れるため、Console.WriteLineの場合は.ToString()
の必要はありません。ただし、Log(string msg)メソッドにはそれが必要な場合があります。