onlinegdb online linea dev compiler compilador c++ gdb

c++ - online - GDB step over function(next) no parece funcionar



online gdb python (2)

Estoy intentando depurar un programa que escribí en C ++. Aquí está el código:

void a() { } void b() { a(); } int main() { b(); return 0; }

Lo compilé usando: g++ -g3 -O0 -o cards.exe cards.cpp . Aquí está el resultado de mi sesión de gdb:

(gdb) b main Breakpoint 1 at 0x401421: file cards.cpp, line 10. (gdb) r Starting program: C:/workspace/Cards/src/cards.exe [New thread 1624.0xa28] Breakpoint 1, main () at cards.cpp:10 10 int main() (gdb) n 12 b(); (gdb) n b () at cards.cpp:5 5 void b() (gdb) n 7 a(); (gdb) quit The program is running. Exit anyway? (y or n)

Mi pregunta es, ¿por qué el envío de un próximo comando a gdb todavía entra en una función? Estoy usando g ++ 4.2.1-sjlj y gdb 6.8.


Los comandos step y next funcionan una línea fuente a la vez, de modo que cuando todo está en una línea, una next me lleva directamente al final de main() .

3 int main() { b(); return 0; } (gdb) n 0x00001faa in start ()

Con el código formateado con menos densidad, aún no veo los resultados que ves. Puse las llamadas a funciones en líneas separadas para hacer que gdb las pise de a una por vez. Esto es lo que tengo entonces:

jkugelman$ cat cards.cpp void a() { } void b() { a(); } int main() { b(); return 0; } jkugelman$ g++ -g3 -O0 -o cards cards.cpp jkugelman$ gdb ./cards GNU gdb 6.3.50-20050815 (Apple version gdb-960) (Sun May 18 18:38:33 UTC 2008) <snip> Reading symbols for shared libraries .... done (gdb) b main Breakpoint 1 at 0x1ff2: file cards.cpp, line 9. (gdb) r Starting program: /Users/jkugelman/Development//cards Reading symbols for shared libraries +++. done Breakpoint 1, main () at cards.cpp:9 9 b(); (gdb) n 10 return 0; (gdb) n 11 } (gdb) n 0x00001faa in start ()

No tengo una respuesta, pero solo quería compartir que gdb se comporte como se esperaba en mi iMac. En cualquier caso, gdb trató la llamada a b() como una instrucción y nunca ingresó a la llamada de función.


''n'' es la siguiente declaración y no entrará en la función.

Para entrar en la función, use ''s''. Ese es el paso.