399

私は通常のC#コードを持っています。私にも例外はありません。デバッグ目的で、現在のスタック トレースをプログラムでログに記録したいと考えています。例:

public void executeMethod() 
{
    logStackTrace();
    method();
}
4

7 に答える 7

453

System.Diagnostics名前空間を見てください。中にはおみやげがいっぱい!

System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();

これは、ボンネットの下で何が起こっているかを知るために突っ込んでいくのに本当に良いことです.

目的を達成する可能性のあるロギング ソリューション (NLog、log4net、Microsoft のパターンとプラクティスのエンタープライズ ライブラリなど) を検討することをお勧めします。

于 2009-02-10T09:47:02.930 に答える
250

代替手段は、スタックトレースの文字列表現を返すSystem.Environment.StackTraceSystem.Diagnostics.StackTraceを使用することです。

もう 1 つの便利なオプションは、Visual Studio で変数$CALLERとデバッグ変数を使用することです。これは、アプリケーションを再構築せずに実行時に有効にできるためです。$CALLSTACK

于 2011-07-08T12:38:02.003 に答える
39

これには 2 つの方法があります。はSystem.Diagnostics.StackTrace()、現在のスレッドのスタック トレースを提供します。インスタンスへの参照があるThread場合、オーバーロードされたバージョンの を介してそのスタック トレースを取得できますStackTrace()

Stack Overflow の質問How to get non-current thread's stacktrace?も確認してください。.

于 2009-02-10T10:05:37.037 に答える
11
Console.WriteLine(
    new System.Diagnostics.StackTrace().ToString()
    );

出力は次のようになります。

YourNamespace.Program.executeMethod (文字列メッセージ) で

YourNamespace.Program.Main (文字列 [] args) で

メソッドに置き換えConsole.WriteLineますLog.ToString()実際には、 Console.WriteLine のケースは受け入れる ので必要ありませんobject。ただし、 Log(string msg) メソッドにはそれが必要になる場合があります。

于 2018-12-20T01:24:30.803 に答える