Jawaban:
Lihatlah System.Diagnostics
namespace. Banyak barang di sana!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
Ini benar-benar baik untuk melihat-lihat untuk mengetahui apa yang terjadi di bawah tenda.
Saya sarankan Anda melihat-lihat solusi logging (seperti NLog, log4net atau pola dan praktik Microsoft Library Enterprise) yang dapat mencapai tujuan Anda dan kemudian beberapa. Semoga beruntung kawan!
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.
Environment.StackTrace
baru saja contoh StackTrace
.
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 dengan at 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 sebuah Thread
instance, Anda bisa mendapatkan jejak stack untuk itu melalui versi overload StackTrace()
.
Anda mungkin juga ingin memeriksa pertanyaan Stack Overflow. Bagaimana cara mendapatkan stacktrace tidak lancar? .
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.
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
Outputnya akan mirip dengan:
di YourNamespace.Program.executeMethod (String msg)
di YourNamespace.Program.Main (String [] args)
Ganti Console.WriteLine
dengan Log
metode Anda . Sebenarnya, tidak perlu untuk .ToString()
kasus Console.WriteLine saat menerima
object
. Tetapi Anda mungkin membutuhkannya untuk metode Log (string msg) Anda.
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
Tampaknya bekerja untuk saya
StackTrace
adalah anjing yang lambat - jadi gunakanlah dengan hemat.