GDB 未在所需行上设置断点

问题描述 投票:0回答:1

在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行设置断点?可能是什么原因?我该如何解决它?

c debugging x86 gdb
1个回答
0
投票

您无法在第 4 行设置断点,因为它是一个没有初始化程序的声明,而不是语句,因此没有与之关联的汇编指令。

如果你初始化了

i
,那么将会有一个与之配套的汇编指令,所以你应该能够在之后设置一个断点。

© www.soinside.com 2019 - 2024. All rights reserved.