GDB跨步功能(下一个)似乎不起作用

时间:2010-09-17 04:27:18

标签: c++ gdb

我正在尝试调试我用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。

2 个答案:

答案 0 :(得分:5)

stepnext命令一次只能处理一个源代码行,所以当一切都在一行上时,一个next将我带到{{1}的末尾}。

main()

如果代码格式不那么密集,我仍然看不到你看到的结果。我把函数调用放在不同的行上,让gdb一次一个地跳过它们。这就是我得到的:

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

我没有答案,但我只是想分享一下gdb在我的iMac上的表现如预期。在任何一种情况下,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 () 的调用视为一条指令,并且从未进入函数调用。

答案 1 :(得分:0)

'n'是next语句,不会进入函数。

要进入该功能,请使用's'。那是step