GDB не может сломать strcpy ()? [закрыто]

поэтому я пытаюсь отладить эту простую программу на 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);

Как вы это видите полностью пропускает точку останова strcpy ... Этот вопрос уже был размещен на таких сайтах, как stackoverflow, но ни один из ответов мне не помог: я пробовал добавить -fno-builtin, но безрезультатно. Помогите, я заблудился.

Дополнительная информация: uname --all Linux 4.10.0-33-generic # 37-Ubuntu SMP Пт 11 августа 10:55:28 UTC 2017 x86_64 x86_64 x86_64 GNU / Linux

0
задан 31 August 2017 в 01:56

1 ответ

Это - вероятно, не конкретный вопрос 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;}

действительно код, который Вы пытаетесь отладить, gcc вероятно, достаточно умно, чтобы иметь simpified Ваш код как printf("Hello world\n"); return 0, или просто используйте встроенное для strcpy.

Так попытка --no-builtin, perphaps с -O0, это, по крайней мере, продолжает работать gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609.

Можно использовать objdump -d prog для наблюдения дизассемблирования кода нет никакого вызова к strcpy здесь.

Для этого вопроса в особенности

Вы используете break 7, но строка пуста, с помощью break 8 должен работать.

3
ответ дан 2 November 2019 в 08:22

Другие вопросы по тегам:

Похожие вопросы: