- Published on
Geliştirdiğim yazılımın fırlattığı hataların kaynağına nasıl erişebilirim?
- Authors
- Name
- Oğuzhan Kırçalı
Büyük bir yazılım projesi hayal edin. Onlarca sınıf ve yüzlerce metot… Bu kalabalıkta hataları yakalamak kolay olsa da hatayı kimin yaptığını bulmak biraz zor oluyor. İç içe onlarca metot çağrısından sıyrılarak hatanın tam olarak hangi sınıfın hangi metodunun hangi satırından kaynaklandığını Stack Trace aracılığı ile bulmak, bu zorluğu oldukça kolaylaştırdı benim için.
MVC projesinin Global.asax dosyasındaki Application_Error
metodunda hatayı yakalıyorum. Burada dikkat edilmesi gereken nokta, try-catch bloğu kullanılan metotlardaki hatalar Global.asax’daki bu metoda düşmez. O zaman herkes kendi catch’ini yönetecek demektir.
Benim senaryomda Global.asax dosyasından yazıyor olsam da Exception’ı yakaladığınız her yerde bu metodu çağırarak sonuca erişebilirsiniz.
protected void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError();
string allFootprints = GetAllFootprints(ex);
}
Hatayı yakaladıktan sonra aşağıdaki metoda gönderiyoruz.
public static string GetAllFootprints(Exception x)
{
var st = new StackTrace(x, true);
var frames = st.GetFrames();
var traceString = "";
foreach (var frame in frames)
{
if (frame.GetFileLineNumber() < 1)
continue;
traceString +=
"File: " + frame.GetFileName() +
", Method:" + frame.GetMethod().Name +
", LineNumber: " + frame.GetFileLineNumber();
traceString += " –> ";
}
return traceString;
}
Koddan da anlayacağınız üzere, bu metot bize şöyle bir metin dönecektir.
File: c:\MyProject\Program.cs, Method:MyFunction, LineNumber: 29 →
File: c:\MyProject\Program.cs, Method:Main, LineNumber: 16 →