在GDB中,我试图在第4行设置断点,但它总是在第5行放置一个断点。即使我放置break main,它也会在第5行放置断点,而第4行是第一行。为什么以及如何解决这个问题?
在我的
coding
目录中,我有 main.c
文件,其中包含以下内容:
#include <stdio.h>
int main() {
int i; // line 4
for (i = 0; i < 10; i++) {
printf("Hello world!\n");
}
return 0;
}
现在我用 x86 架构的 gcc 和额外的调试信息编译了它......
gcc -m32 -g main.c
我正在使用 gdb 来检查 a.out:
gdb -q ./a.out
当我输入 break main
时,它会在第 5 行(即 for (i = 0; i < 10; i++) {
行)处设置断点。即使我使用 break 4
在第 4 行明确放置断点,它仍然使用代码 for (i = 0; i < 10; i++) {
在第 5 行设置断点。这是一个例子:
$ gdb -q a.out
Reading symbols from a.out...
(gdb) break 4
Breakpoint 1 at 0x11aa: file main.c, line 5.
(gdb)
为什么不在第4行设置断点?可能是什么原因?我该如何解决它?
您无法在第 4 行设置断点,因为它是一个没有初始化程序的声明,而不是语句,因此没有与之关联的汇编指令。
如果你初始化了
i
,那么将会有一个与之配套的汇编指令,所以你应该能够在之后设置一个断点。