如何修复GDB断点

时间:2016-06-10 14:18:37

标签: c debugging gdb

我在C中创建了这个简单的程序用于调试目的:

#include <stdio.h>
#include <string.h>

int main() {
    char str_a[20];

    strcpy(str_a, "Hello, world!\n");
    printf(str_a);
}

当使用GDB调试程序时,我在第6行(空行),第7行(strcpy函数)和第8行(print)设置断点。所以这就是我所做的:

(gdb) break 6
Breakpoint 1 at 0x4004ee: file char_array.c, line 6.
(gdb) break strcpy
Function "strcpy" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 2 (strcpy) pending.
(gdb) break 8
Breakpoint 3 at 0x400510: file char_array.c, line 8.

就我而言,到目前为止一切顺利。但是现在我运行程序时会出现问题:

(gdb) run
Starting program: /root/Documents/Scripts/C Scripts/char_array 
Breakpoint 1, main () at char_array.c:7
7               strcpy(str_a, "Hello, world!\n");
(gdb) i r rip
rip            0x4004ee 0x4004ee <main+8>

这表明RIP寄存器仍然是主要的。继续:

(gdb) cont
Continuing.

Breakpoint 3, main () at char_array.c:8
8               printf(str_a);

显然,该程序跳过第二个断点(在strcpy),但为什么?我看不出任何理由。为了确保程序跳过断点,我再次查看了RIP寄存器:

(gdb) i r rip
rip            0x400510 0x400510 <main+42>

因此RIP寄存器没有跳转到共享库,仍然在main()中。这是什么原因?!很多时候它一直让我感到不安。

0 个答案:

没有答案