Tengo algún programa y cada vez que lo ejecuto arroja una excepción y no sé cómo comprobar exactamente qué arroja, así que mi pregunta es, ¿es posible detectar excepciones y imprimirla (he encontrado filas, que ha producido una excepción) gracias de antemanocómo detectar una excepción desconocida e imprimirla
Respuesta
Si se deriva de std::exception
se puede tomar como referencia:
try
{
// code that could cause exception
}
catch (const std::exception &exc)
{
// catch anything thrown within try block that derives from std::exception
std::cerr << exc.what();
}
Pero si la excepción es una clase que ha no se deriva de std::exception
, Deberá saber con anticipación su tipo (es decir, si atrapa std::string
o some_library_exception_base
).
Usted puede hacer una captura todo:
try
{
}
catch (...)
{
}
pero entonces no se puede hacer nada con la excepción.
Pruebe lo sugerido por R Samuel Klatchko primero. Si eso no ayuda, hay algo más que podría ayudar:
a) Coloque un punto de interrupción en el tipo de excepción (manejado o no) si su depurador lo admite.
b) En algunos sistemas, el compilador genera una llamada a una función (¿indocumentada?) Cuando se ejecuta una instrucción throw. para averiguar qué función es para su sistema, escriba un programa hello world simple, que arroja y atrapa una excepción. inicie un depurador y coloque un punto de interrupción en el constructor de excepciones, y vea desde donde se está llamando. la función de llamada es probablemente algo así como __throw(). luego, inicie el depurador de nuevo con el programa que desea investigar como depuración. coloque un punto de interrupción en la función mencionada anteriormente (__throw o lo que sea) y ejecute el programa. cuando se lanza la excepción, el depurador se detiene y usted está allí para descubrir por qué.
Si usa ABI para gcc o CLANG, puede conocer el tipo de excepción desconocida. Pero es una solución no estándar.
En C++ 11 tiene: std::current_exception
código Ejemplo de un sitio:
#include <iostream>
#include <string>
#include <exception>
#include <stdexcept>
void handle_eptr(std::exception_ptr eptr) // passing by value is ok
{
try {
if (eptr) {
std::rethrow_exception(eptr);
}
} catch(const std::exception& e) {
std::cout << "Caught exception \"" << e.what() << "\"\n";
}
}
int main()
{
std::exception_ptr eptr;
try {
std::string().at(1); // this generates an std::out_of_range
} catch(...) {
eptr = std::current_exception(); // capture
}
handle_eptr(eptr);
} // destructor for std::out_of_range called here, when the eptr is destructed
Inspirado por Dawid Drozd respuesta:
incluyen esta cabecera #include <exception>
try
{
// The code that could throw
}
catch(...)
{
auto expPtr = std::current_exception();
try
{
if(expPtr) std::rethrow_exception(expPtr);
}
catch(const std::exception& e) //it would not work if you pass by value
{
std::cout << e.what();
}
}
- 1. Excepción desconocida en parseSdkContent
- 2. JAXB Excepción: Clase desconocida en este contexto
- 3. iphone dev: cómo detectar excepción 'NSRangeException'
- 4. Acerca de detectar buenas prácticas de excepción
- 5. Groovy: escapando una expresión regular arbitraria (desconocida)
- 6. Hibernate e inesperado End of Subtree excepción
- 7. ¿Existe un método genérico para iterar e imprimir valores en una colección desconocida?
- 8. Detectando una clase desconocida en un clasificador bayes
- 9. ¿Cómo se puede devolver la salida de una función diferente de imprimirla?
- 10. Detectar excepción en el bloque finally
- 11. cómo detectar la excepción de la vista MVC?
- 12. ¿Cómo lleno una matriz de longitud desconocida en Powershell?
- 13. ¿Cómo atrapar una excepción específica en JDBC?
- 14. Cómo detectar si la carga de una imagen generará una excepción OutOfMemory en .NET?
- 15. ¿Es bueno detectar un tipo más general de Excepción?
- 16. ¿Cómo borrarInterval con ID desconocida?
- 17. Detección de caracteres " " desconocida Unicode en PHP
- 18. ¿Cómo puedo detectar una excepción de estado 404 lanzada por simpleHttp of Http.Conduit
- 19. Matriz de una longitud desconocida en C#
- 20. Cómo coger una excepción dentro runResourceT
- 21. ¿Cómo atrapar una excepción en el hilo principal si la excepción ocurre en el hilo secundario?
- 22. MPI recv desde una fuente desconocida
- 23. ¿Cómo ignoro una excepción?
- 24. sed - opción desconocida para `s'
- 25. Serialización y restauración de una clase desconocida
- 26. Cómo lanzar una excepción matriz en PHP
- 27. Hibernate @ManyToOne hace referencia a una entidad desconocida
- 28. Cómo detectar una excepción no controlada en Windows Azure (Trabajador) Rol
- 29. ¿Cómo puedo obtener el atributo ExpectedException de NUnit para detectar la clase base de una excepción?
- 30. ¿Cómo puedo detectar cuándo se ha lanzado una excepción globalmente en Java?
@R Samuel Klatchko: muchas gracias, una pregunta más, ¿puedo usar su método para verificar las excepciones de nuevo y eliminar? – helloWorld
@helloWorld - sí, esto captará las excepciones lanzadas desde 'new',' delete' y cualquier constructor o destructor llamado por ellos (siempre que la instrucción 'new' o' delete' esté dentro del bloque 'try'). –
¿cómo debo solucionar mi problema si la excepción no se deriva de std :: exception? – javapowered