Yanıtlar:
İsim alanına bir göz atın System.Diagnostics
. Orada güzellikler bir sürü!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
Bu, kaputun altında neler olup bittiğini öğrenmek için etrafta bir şaka yapmak için gerçekten iyi.
Amacınıza ve daha sonra bazılarına ulaşabilecek günlük çözümlerine (NLog, log4net veya Microsoft kalıpları ve uygulamaları Enterprise Library gibi) göz atmanızı öneririm. İyi şanslar dostum!
Buna bir alternatif System.Environment.StackTraceSystem.Diagnostics.StackTrace
kullanmaktır yığın izinin dize olarak temsilini döndüren .
Başka bir kullanışlı seçenek, uygulama yeniden oluşturulmadan çalışma zamanı etkinleştirilebildiğinden , Visual Studio'da$CALLER
ve $CALLSTACK
hata ayıklama değişkenlerini kullanmaktır.
Environment.StackTrace
sadece yeni bir örnek StackTrace
.
System.Environment.StackTrace
bu bilgilere erişmenin daha kolay bir yolu olabilir.
System.Diagnostics.StackTrace
- bkz msdn.microsoft.com/en-us/library/...
Environment.StackTrace
zaman ile başlayan rahatsız edici değil at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
mi? Bu, birinin istediği noktada olduğu gibi mevcut yığın izinin bir parçası değildir.
Bunu yapmanın iki yolu vardır. Bu System.Diagnostics.StackTrace()
, geçerli iş parçacığı için bir yığın izlemesi verir. Bir Thread
örneğe başvurunuz varsa bunun için yığın izlemesini aşırı yüklenmiş sürümü aracılığıyla alabilirsiniz StackTrace()
.
Ayrıca Yığın Taşması sorusunu da kontrol etmek isteyebilirsiniz. Güncel olmayan iş parçacığının yığın izini nasıl alabilirim? .
Bunu kodu değiştirmeden Visual Studio hata ayıklayıcısında da yapabilirsiniz.
Elbette, kodu farklı bir makinede çalıştırıyorsanız bu yardımcı olmaz, ancak yayın kodunu etkilemeden veya programı yeniden başlatmaya gerek kalmadan otomatik olarak bir yığın izlemesi tükürmek oldukça kullanışlı olabilir.
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
Çıktı şuna benzer olacaktır:
at YourNamespace.Program.executeMethod (Dize msg)
at YourNamespace.Program.Main (String [] argümanlar)
Değiştir Console.WriteLine
sizin ile Log
yöntemle. Aslında, .ToString()
kabul ettiği gibi Console.WriteLine durumuna
gerek yoktur object
. Ancak Log (string msg) yönteminiz için buna ihtiyacınız olabilir.
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]);
}
}
Benim için iş gibi görünüyor
StackTrace
olduğunu yavaş köpek yüzden idareli kullanmak -.