2009-06-29 12 views

Respuesta

6

Solo puede hacerlo si tiene símbolos de depuración disponibles.

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

Si desea depurar una situación tal en VS, es mejor que sólo echa Thrown casilla de verificación de Common Language Runtime Exceptions en Exceptions de diálogo situado en Debug menú. El depurador se interrumpirá tan pronto como se produzca la excepción, incluso si está en un bloque try.

+0

Esta es la respuesta correcta. – Timwi

1

podría utilizar el StackFrame Class:

try 
{ 
    ... 
    ... 

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

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

Sin embargo, tenga en cuenta que esto arrojará la información para la cláusula 'catch' ... no donde se lanzó la excepción, para eso necesita verificar el contenido de la propiedad 'StackTrace' de la excepción que atrapó. – jerryjvl

+0

Esta respuesta es incorrecta, por las razones que jerryjvl ha declarado. ¿Cómo se puede aceptar esto como correcto? – Timwi

1

Pues bien, en .NET que tiene cuál es llamado un FirstChanceException. Éstos esencialmente se lanzan antes de que se maneje una excepción. Hay dos formas de ver el problema que presenta aquí. Uno es desde un ángulo de depuración. Si está depurando, puede configurar su depurador para atrapar excepciones lanzadas desde la ventana Depurar/Excepciones. Esto es más fácil en un contexto interactivo. SI usted necesita para registrar esta información desde dentro de un contexto no interactivo a continuación, me gustaría hacer algo similar a lo que CMS está hablando de ...

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

La única diferencia aquí es que tenemos todo el Seguimiento de la pila, a continuación, vaya al primer fotograma, que es donde se lanzó originalmente la excepción.

+0

¿No es el cuadro 0 el método actual de trama, no dónde se originó el error? –

2

Personalmente, acabo de registrar el valor de retorno ToString() de la excepción. La traza completa de la pila está incluida. Es una línea de código ... muy simple.

Cuestiones relacionadas