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

No *_*ove 7 c++ gdb

我正在尝试调试我用C++编写的程序.这是代码:

void a() { }
void b() { a(); }
int main() { b(); return 0; }
Run Code Online (Sandbox Code Playgroud)

我用它编译: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)
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么向gdb发送下一个命令仍然会进入函数?我正在使用g ++ 4.2.1-sjlj和gdb 6.8.

Joh*_*ica 5

stepnext命令的工作每次一个源代码行,所以当一切都在一行上一个next需要我的权利在2002年底main().

3   int main() { b(); return 0; }
(gdb) n
0x00001faa in start ()
Run Code Online (Sandbox Code Playgroud)

由于代码格式不太密集,我仍然看不到你看到的结果.我把函数调用放在不同的行上,让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 ()
Run Code Online (Sandbox Code Playgroud)

我没有答案,但我只是想分享一下gdb在我的iMac上的表现如预期.在任何一种情况下,gdb都将调用b()视为一条指令,并且从未进入函数调用.


Sas*_*shi -2

'n' 是next语句,不会单步执行函数。

要单步执行该函数,请使用“s”。那是step

  • 不。`n` 确实单步执行该函数。这正是OP正在解决的问题。 (2认同)