Saya memiliki kode C # biasa. Saya tidak punya pengecualian . Saya ingin secara program mencatat jejak stack saat ini untuk tujuan debugging. Contoh:
public void executeMethod()
{
logStackTrace();
method();
}
c#
.net
logging
stack-trace
printstacktrace
Ricibald
sumber
sumber
StackTrace
adalah anjing yang lambat - jadi gunakanlah dengan hemat.Alternatif untuk
System.Diagnostics.StackTrace
menggunakan System.Environment.StackTrace yang mengembalikan representasi string dari stacktrace.Opsi lain yang bermanfaat adalah menggunakan variabel
$CALLER
dan$CALLSTACK
debugging di Visual Studio karena ini dapat diaktifkan waktu berjalan tanpa membangun kembali aplikasi.sumber
Environment.StackTrace
baru saja contohStackTrace
.System.Environment.StackTrace
mungkin cara yang lebih nyaman untuk mengakses informasi itu.System.Diagnostics.StackTrace
- lihat msdn.microsoft.com/en-us/library/…Environment.StackTrace
selalu dimulai denganat System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
? Itu bukan bagian dari jejak stack saat ini karena pada titik seseorang mencarinya.Ada dua cara untuk melakukan ini. Ini
System.Diagnostics.StackTrace()
akan memberi Anda jejak tumpukan untuk utas saat ini. Jika Anda memiliki referensi ke sebuahThread
instance, Anda bisa mendapatkan jejak stack untuk itu melalui versi overloadStackTrace()
.Anda mungkin juga ingin memeriksa pertanyaan Stack Overflow. Bagaimana cara mendapatkan stacktrace tidak lancar? .
sumber
Anda juga dapat melakukan ini di debugger Visual Studio tanpa mengubah kode.
Tentu saja, ini tidak membantu jika Anda menjalankan kode pada mesin yang berbeda, tetapi bisa sangat berguna untuk dapat memuntahkan jejak stack secara otomatis tanpa mempengaruhi kode rilis atau bahkan tanpa perlu me-restart program.
sumber
Outputnya akan mirip dengan:
Ganti
Console.WriteLine
denganLog
metode Anda . Sebenarnya, tidak perlu untuk.ToString()
kasus Console.WriteLine saat menerimaobject
. Tetapi Anda mungkin membutuhkannya untuk metode Log (string msg) Anda.sumber
Tampaknya bekerja untuk saya
sumber