gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:37:20 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com