Si puede cambiar el código fuente, puede utilizar algún truco sucio con el preprocesador:
void on_return() {
}
#define return return on_return(), /* If the function has a return value != void */
#define return return on_return() /* If the function has a return value == void */
/* <<<-- Insert your function here -->>> */
#undef return
continuación, ajuste una punto de interrupción a on_return
y vaya a un marco up
.
Atención: Esto no funcionará, si una función no regresa a través de una declaración return
. Así que asegúrese de que su última línea sea return
.
Ejemplo (descaradamente copiado de código C, pero trabajará también en C++):
#include <stdio.h>
/* Dummy function to place the breakpoint */
void on_return(void) {
}
#define return return on_return()
void myfun1(int a) {
if (a > 10) return;
printf("<10\n");
return;
}
#undef return
#define return return on_return(),
int myfun2(int a) {
if (a < 0) return -1;
if (a > 0) return 1;
return 0;
}
#undef return
int main(void)
{
myfun1(1);
myfun2(2);
}
La primera macro cambiará
return;
a
return on_return();
que es válido , desde on_return
también devuelve void
.
La segunda macro cambiará
return -1;
a
return on_return(), -1;
que llamará on_return()
y luego regresar -1 (gracias a la ,
-operator).
Este es un truco muy sucio, pero a pesar de usar pasos hacia atrás, funcionará en entornos de subprocesos múltiples y funciones en línea, también.
¿Ha explorado rbr? – Jack