Команды step
и next
работают по одной исходной строке за раз, поэтому, когда все все в одной строке, одна next
выводит меня прямо в конец main()
.
3 int main() { b(); return 0; }
(gdb) n
0x00001faa in start ()
С кодом, отформатированным менее плотно, я все еще не вижу результатов, которые вы видите. Я помещаю вызовы функций в отдельные строки, чтобы заставить GDB перешагивать их по одному. Вот что я тогда получу:
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/StackOverflow/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 ()
У меня нет ответа, но я просто хотел поделиться, что GDB ведет себя так, как и ожидалось на моем iMac. В любом случае GDB обрабатывал вызов b()
как одну инструкцию и никогда не входил в вызов функции.