2009-06-29 13 views

cevap

6

... nispeten basit görünüyor, ama ben onu anlamaya olamaz.

catch(Exception ex) { 
    // check the ex.StackTrace property 
} 

VS böyle bir durum hata ayıklamak istiyorsanız

, daha iyi sadece Debug menüsünde bulunan Exceptions iletişim Common Language Runtime Exceptions için Thrown onay kutusunu işaretleyin ediyorum. Hata ayıklayıcısını, try bloğunda olsa bile istisna atılır giderilmez kopar. Bir FirstChanceException denilen neyin var .NET,

try 
{ 
    ... 
    ... 

} 
catch(...) 
{ 
    StackFrame sf = new StackFrame(true); 

    int lineNumber = sf.GetFileLineNumber(); 
    int colNumber = sf.GetFileColumnNumber(); 
    string fileName = sf.GetFileName(); 
    string methodName = sf.GetMethod().Name; 
} 
+0

Doğru cevap budur. – Timwi

1

Sen StackFrame Class kullanabilirsiniz. Bunlar istisna yapılmadan önce esas olarak atılırlar. Burada sunmakta olduğunuz konuya bakmanın iki yolu vardır. Bir hata ayıklama noktasından. Hata ayıklama durumunda hata ayıklayıcınızı, Hata Ayıklama/İstisnalar penceresinden atılan istisnaları yakalamak için ayarlayabilirsiniz. Bu etkileşimli bir bağlamda daha kolaydır. olmayan bir interaktif kapsamında bu bilgileri kaydetmek gerekir EĞER CMS bahsettiğini sonra

try 
{ 
    ... 
} 
catch(Exception ex) 
{ 
    System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(ex); 
    System.Diagnostics.StackFrame firstFrame = stackTrace.GetFrame[0]; 
    Console.WriteLine(firstFrame.GetFileLineNumber); 
    ... 
} 

burada tek fark o zaman, bütün Yığın İzleme olsun ki ... benzer bir şey yapacağını istisnanın ilk olarak atıldığı ilk kareye git.

+4

Bununla birlikte, bunun 'catch' maddesiyle ilgili bilgileri döndüreceğine dikkat edin ... istisnanın atıldığı yer değil, yakalandığınız istisnanın 'StackTrace' özelliğinin içeriğini kontrol etmeniz gerekir! – jerryjvl

+0

Bu cevap yanlış, jerryjvl'nin belirttiği nedenlerden dolayı. Bu nasıl doğru kabul edilebilir? – Timwi

1

Kuyusu:

+0

Çerçeve 0 geçerli değil, hata nereden kaynaklandı? –

2

Şahsen ben sadece istisnanın ToString() dönüş değeri kaydetmek. Bütün yığın izlemesi dahildir. Bu bir satır kod ... ölü basit.