我正在尝试调试我用 C++ 编写的程序。这是代码:
void a() { }
void b() { a(); }
int main() { b(); return 0; }
我使用以下方法编译它:g++ -g3 -O0 -o cards.exe cards.cpp
.
这是我的 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)
为什么向 GDB 发送下一个命令仍然会进入函数?
我正在使用 g++ 4.2.1-sjlj 和 GDB 6.8。
The step
and 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()
作为一条指令并且从未进入函数调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)