C++ detecta todas las excepciones
¿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.
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 (...) {
// ...
}
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.