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.