O GDB não pode quebrar o strcpy ()? [fechadas]

0

estou tentando depurar este simples programa c

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

int main(){

char str_a[20];

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

return 0;}

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);

Como você pode ver, ele pula totalmente o breakpoint ... Esta questão já foi postada em sites como o stackoverflow, mas nenhuma das respostas me ajudou: eu tentei adicionar o fno-builtin mas nenhum resultado. Ajuda, estou perdido.

Mais algumas informações:  uname --all Linux 4.10.0-33-genérico # 37-Ubuntu SMP Sex 11 de agosto 10:55:28 UTC 2017 x86_64 x86_64 x86_64 GNU / Linux

    
por IDK 31.08.2017 / 10:56

1 resposta

3

Esta provavelmente não é uma questão específica do Ubuntu, então, por favor, dê uma olhada em esta resposta em stackoverflow .

Se esse código:

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

int main(){

char str_a[20];

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

return 0;}

é realmente o código que você está tentando depurar, gcc provavelmente é inteligente ter simpified seu código como printf("Hello world\n"); return 0 , ou simplesmente usar o builtin para strcpy .

Então, tente --no-builtin , perphaps com -O0 , pelo menos está funcionando em gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 .

Você pode usar objdump -d prog para ver a desmontagem do seu código, não há chamada para strcpy aqui.

Para esta questão em particular

Você está usando break 7 , mas a linha está vazia, usando break 8 para funcionar.

    
por pim 31.08.2017 / 11:23