C++ detecta todas las excepciones

Resuelto Obediah Stane asked hace 16 años • 0 respuestas

¿Existe un equivalente en C++ de Java?

try {
    ...
}
catch (Throwable t) {
    ...
}

Estoy intentando depurar el código Java/jni que llama a funciones nativas de Windows y la máquina virtual sigue fallando. El código nativo aparece bien en las pruebas unitarias y solo parece fallar cuando se llama a través de jni. Un mecanismo genérico de captura de excepciones resultaría extremadamente útil.

Obediah Stane avatar Nov 25 '08 07:11 Obediah Stane
Aceptado
try{
    // ...
} catch (...) {
    // ...
}

detectará todas las excepciones de C++, pero debe considerarse un mal diseño. Puede usar el nuevo mecanismo std::current_exception de c++11 , pero si no tiene la capacidad de usar c++11 (sistemas de código heredado que requieren una reescritura), entonces no tiene un puntero de excepción con nombre para usar para obtener un mensaje o nombre. Es posible que desee agregar cláusulas catch separadas para las diversas excepciones que puede detectar y capturar solo todo lo que se encuentra en la parte inferior para registrar una excepción inesperada. P.ej:

try{
    // ...
} catch (const std::exception& ex) {
    // ...
} catch (const std::string& ex) {
    // ...
} catch (...) {
    // ...
}
Greg D avatar Nov 25 '2008 00:11 Greg D

Alguien debería agregar que no se pueden detectar "bloqueos" en el código C++. Estos no lanzan excepciones, sino que hacen lo que quieran. Cuando ve que un programa falla debido, por ejemplo, a una desreferencia de puntero nulo, está teniendo un comportamiento indefinido. No hay std::null_pointer_exception. Intentar detectar excepciones no ayudará allí.

Por si acaso alguien está leyendo este hilo y cree que puede entender la causa de los fallos del programa. En su lugar, se debe utilizar un depurador como gdb.

Johannes Schaub - litb avatar Nov 25 '2008 01:11 Johannes Schaub - litb