Estoy buscando una respuesta en MS VC++.Averiguar el origen de una excepción en C++ después de que se detecta?
Al depurar una aplicación grande de C++, que desafortunadamente tiene un uso muy extenso de las excepciones de C++. A veces encuentro una excepción un poco más tarde de lo que realmente quiero.
Ejemplo en pseudo código:
FunctionB()
{
...
throw e;
...
}
FunctionA()
{
...
FunctionB()
...
}
try
{
Function A()
}
catch(e)
{
(<--- breakpoint)
...
}
I puede detectar la excepción con un punto de interrupción al depurar. Pero no puedo rastrear si ocurrió la excepción en FunctionA()
o FunctionB()
, o alguna otra función. (Suponiendo un uso extensivo de excepciones y una gran versión del ejemplo anterior).
Una solución a mi problema es determinar y guardar la pila de llamadas en el constructor de excepciones (es decir, antes de que quede atrapada). Pero esto requeriría que obtenga todas las excepciones de esta clase de excepción base. También requeriría una gran cantidad de código, y tal vez ralentizar mi programa.
¿Hay alguna manera más fácil que requiera menos trabajo? Sin tener que cambiar mi gran base de código?
¿Hay mejores soluciones a este problema en otros idiomas?
realmente la pila no se desenrolla hasta que se hayan invocado todos los controladores de captura. (El modelo de excepción C++, implementado encima de la ventana SEH, realiza algunos pasos a través de la cadena de excepción SEH). y es perfectamente posible llegar al origen de la excepción (en el depurador, por ejemplo) estando dentro de esta captura. – deemok