2010-05-07 4 views
9

Estoy buscando una forma de recuperar la excepción actual sin tener que pasarla como una variable.¿Cómo obtener la excepción actual sin tener que pasar la variable?

Supongamos el siguiente código

public void MakeItFail() 
{ 
    try 
    { 
     throw new FailException(); 
    } 
    catch // Yes I'm aware that this shouldn't be done, but I don't want to go through all the code base and change it 
    { 
     ShowMessage("An error occured"); 
    } 
} 

public void ShowMessage(string message) 
{ 
    // How can I retrieve the exception here 
} 

En la ventana de inspección, puedo usar $ excepción para obtener la excepción actual. ¿Hay un código equivalente?

+2

Lo que estás pensando hacer es malo. Muy mal. Para. No lo hagas No. No es para ti. No lo hagas Tome una copia de las pautas de diseño del marco y lea la sección de manejo de excepciones. – Will

+1

@Will - ¿No creo que le gustaría trabajar en la reescritura de su aplicación? – ChaosPandion

+0

No sé cuán grande es la base de código, pero sospecho fuertemente que el tiempo que llevaría volver atrás y corregir todas las cláusulas de captura sería menor que el tiempo requerido para implementar y probar el truco de solución alternativa, descontando incluso el tiempo requerido para mantenerlo en el largo plazo. –

Respuesta

8

No, no lo hay.

Necesita usar un parámetro.

+0

He leído sobre una posible pero difícil forma de usar el ICorDebugThread.GetCurrentException() pero no lo intenté. –

+0

Eso es parte de la API del depurador no administrado. Solo puede usarlo en un proceso que está en pausa en un depurador. Como un proceso no puede depurarse solo, debe escribir un segundo proceso para depurar el primero y llamar a esa API. – SLaks

+1

Y no voy a bajar por ese agujero de conejo: P –

3

Intente suscribirse a este evento la primera vez que carga su aplicación.

AppDomain.CurrentDomain.FirstChanceException += (s, e) => 
{ 
    ShowMessage(e.Exception.Message); 
}; 
+0

aww that.net 4 solamente. Este es un programa existente y no lo estamos convirtiendo a 4.0 aún –

+2

@Pierre - Solo otra razón es una buena razón para actualizar ... – ChaosPandion

+2

Genial, otro agujero de seguridad ... –

Cuestiones relacionadas