GDB 不能破坏 strcpy()?

IDK*_*IDK 0 gcc gdb

所以我试图调试这个简单的 c 程序

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

int main(){

char str_a[20];

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

return 0;}
Run Code Online (Sandbox Code Playgroud)

gcc -g -o prog prog.c

gdb -q ./prog

(gdb) list
1   #include<stdio.h>
2   #include<string.h>
3   
4   int main(){
5   
6       char str_a[20];
7       
8       strcpy(str_a,"Hello, world!\n");        
9       printf(str_a);
10  
(gdb) break 7
Breakpoint 1 at 0x757: file char_array.c, line 7.
(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 9
Breakpoint 3 at 0x76a: file char_array.c, line 9.
(gdb) r
Starting program: /home/pinguino/Desktop/char_array 

Breakpoint 1, main () at char_array.c:8
8       strcpy(str_a,"Hello, world!\n");        
(gdb) c
Continuing.

Breakpoint 3, main () at char_array.c:9
9       printf(str_a);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它完全跳过了 strcpy 断点......这个问题已经发布在像 stackoverflow 这样的网站上,但那里的答案都没有帮助我:我试过添加 -fno-builtin 但没有任何结果。救命,我迷路了。

更多信息:uname --all Linux 4.10.0-33-generic #37-Ubuntu SMP Fri Aug 11 10:55:28 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

pim*_*pim 5

这可能不是 Ubuntu 特定的问题,所以请在 stackoverflow 上查看这个答案

如果该代码:

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

int main(){

char str_a[20];

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

return 0;}
Run Code Online (Sandbox Code Playgroud)

确实是您要调试的代码,gcc可能足够聪明,可以将您的代码printf("Hello world\n"); return 0简化为,或者只是使用strcpy.

所以试试吧--no-builtin,也许吧-O0,它至少正在努力gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

您可以使用objdump -d prog来查看代码的反汇编,这里没有调用strcpy

特别是对于这个问题

您正在使用break 7,但该行是空的,使用break 8应该可以。