私は通常のC#コードを持っています。私にも例外はありません。デバッグ目的で、現在のスタック トレースをプログラムでログに記録したいと考えています。例:
public void executeMethod()
{
logStackTrace();
method();
}
私は通常のC#コードを持っています。私にも例外はありません。デバッグ目的で、現在のスタック トレースをプログラムでログに記録したいと考えています。例:
public void executeMethod()
{
logStackTrace();
method();
}
System.Diagnostics
名前空間を見てください。中にはおみやげがいっぱい!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
これは、ボンネットの下で何が起こっているかを知るために突っ込んでいくのに本当に良いことです.
目的を達成する可能性のあるロギング ソリューション (NLog、log4net、Microsoft のパターンとプラクティスのエンタープライズ ライブラリなど) を検討することをお勧めします。
代替手段は、スタックトレースの文字列表現を返すSystem.Environment.StackTraceSystem.Diagnostics.StackTrace
を使用することです。
もう 1 つの便利なオプションは、Visual Studio で変数$CALLER
とデバッグ変数を使用することです。これは、アプリケーションを再構築せずに実行時に有効にできるためです。$CALLSTACK
これには 2 つの方法があります。はSystem.Diagnostics.StackTrace()
、現在のスレッドのスタック トレースを提供します。インスタンスへの参照があるThread
場合、オーバーロードされたバージョンの を介してそのスタック トレースを取得できますStackTrace()
。
Stack Overflow の質問How to get non-current thread's stacktrace?も確認してください。.
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
出力は次のようになります。
YourNamespace.Program.executeMethod (文字列メッセージ) で
YourNamespace.Program.Main (文字列 [] args) で
メソッドに置き換えConsole.WriteLine
ますLog
。.ToString()
実際には、 Console.WriteLine のケースは受け入れる
ので必要ありませんobject
。ただし、 Log(string msg) メソッドにはそれが必要になる場合があります。