Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何修复GDB断点_C_Debugging_Gdb - Fatal编程技术网

C 如何修复GDB断点

C 如何修复GDB断点,c,debugging,gdb,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) run Starting program: /root/Documents/Scripts/

为了调试,我用C编写了这个简单的程序:

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

int main() {
    char str_a[20];

    strcpy(str_a, "Hello, world!\n");
    printf(str_a);
}
在我看来,到目前为止还不错。但现在我运行程序时出现了一个问题:

(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>
显然,程序跳过了第二个断点(在strcpy),但是为什么呢??我看不出有什么原因。为了确保程序跳过了断点,我再次查看了RIP寄存器:

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

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

你是如何编译这个程序的?是否包含调试信息(
-g
),是否启用了优化?如果在启用任何优化的情况下编译,则GDB向您呈现的程序流的可能副本可能与源代码暗示的内容有所不同。使用gcc的
-O0
选项关闭所有优化。函数在哪里:
print()
?你是说printf()吗?user3629249是的,我是说printf()你是怎么编译这个程序的?是否包含调试信息(
-g
),是否启用了优化?如果在启用任何优化的情况下编译,则GDB向您呈现的程序流的可能副本可能与源代码暗示的内容有所不同。使用gcc的
-O0
选项关闭所有优化。函数在哪里:
print()
?你真的是指printf()?用户3629249是的,我指的是printf()
(gdb) cont
Continuing.

Breakpoint 3, main () at char_array.c:8
8               printf(str_a);
(gdb) i r rip
rip            0x400510 0x400510 <main+42>