c++ - GDB step over function (next) 似乎不起作用

标签 c++ gdb

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

void a() { }
void b() { a(); }
int main() { b(); return 0; }

我编译它使用:g++ -g3 -O0 -o cards.exe cards.cpp

这是我的 GDB session 的输出:

(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。

最佳答案

stepnext 命令一次处理一个源代码行,所以当所有内容都在一行上时,一个 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 ()

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

关于c++ - GDB step over function (next) 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732653/

相关文章:

c++ - boost::multi_array 上的维度无关循环?

c++ - 核心转储但 gdb 无法找到确切位置

c++ - gdb - 如何查看指针数组的内容?

使用 Cygwin 和 gdbtui 进行 C 编程

python - Cygwin 安装程序不安装 gdb.exe

c++ - 为什么当它们都正常工作时,只有以下代码之一是正确的?

c++ - 我怎样才能写出干净利落的c++构造函数?

c++ - 我的 g++ 使用 vector<weak_ptr> erase() 方法生成奇怪的警告

c++ - boost spirit : Why does phrase_parse behave differently to parse when parsing eol?

c++ - GDB 中内部类的不完整类型,其虚拟方法在单独的文件中定义