在 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++) {
行。即使我使用 明确将断点放在第 4 行break 4
,它仍然会使用 在第 5 行设置断点for (i = 0; i < 10; i++) {
。这是一个例子:
$ 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
,那么将会有一个与之相伴的汇编指令,因此您应该能够在其后设置断点。