2012-07-31 12 views
5

Duplicar posible:
How to print message from caught exception?¿A dónde va el texto en una excepción lanzada?

Disculpas si esto es básico o duplicado - lo hice varias búsquedas en primer lugar, pero no encontró nada que respondiera a esto.

Si hago algo básico como:

throw exception("This thing didn't work"); 

¿Dónde puedo ver eso? La cadena no se muestra en la consola de salida, en el seguimiento de la pila ni en ninguno de los archivos .log asociados con el proyecto. Me hace preguntarme por qué incluso estoy poniendo una cuerda allí si no se puede ver en ningún lado. Por supuesto, puedo usar el seguimiento de la pila para ver dónde explotó, pero ese tipo de derrotas con el objetivo de tener excepciones en primer lugar.

En Java, cuando le doy una cadena, la veré en alguna parte. Me pregunto si es posible reproducir este comportamiento en C++.

+1

Creo que se puede ver cuando se detecta la excepción. Aparte de eso, ¿probablemente un desastre? – nhahtdh

+1

Usted * está * atrapando la excepción, ¿verdad? –

+2

Técnicamente eso no es válido. Está utilizando un error en la biblioteca MS (std :: exception no tiene un constructor que tome una cadena). Pero su punto es válido si cambia a 'std :: runtime_error (" Esto no funcionó ")'. –

Respuesta

1

Debe ver la excepción para ver la cadena. Puede ser útil disponer de un controlador excepción de último recurso de la siguiente manera:

int main(int argc, char **argv) 
{ 
    try { 
     ... 
    } 
    catch(const std::exception& e) { 
     std::cout << "Uncaught exception: " << e.what() << std::endl; 
    } 
} 

En una aplicación de interfaz gráfica de usuario se puede tener una relación de capturas en el bucle de eventos principal, y mostrar el mensaje de error en un cuadro de mensaje .

En una aplicación no guiada por eventos, también puede tener una instrucción de captura en el bucle de evento principal y escribir el mensaje de error en un archivo de registro.

Estos métodos se asegurarán de que vea todas las excepciones. Por supuesto, la mayoría de las excepciones deben detectarse antes de que lleguen a su controlador de excepción de último recurso.

+0

Esto es probablemente así. El problema es que algunos de los bloqueos son causados ​​por las afirmaciones en las bibliotecas, y parece que no hay forma de detectarlos, por lo que incluso un try/catch de último recurso no atrapa todo ... –

Cuestiones relacionadas