Ошибка при входе в string.h
в GDB 7.5. Вот простой пример программы:Невозможно перейти в функцию string.h с помощью GDB
Исходный код:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20];
strcpy(str1, "STEP INTO ME\n");
printf(str1);
}
Составитель:~$ gcc -g foo.c
Вызванный:~$ gdb -q ./a.out
GDB:
(gdb) break 5
Breakpoint 1 at 0x8048471: file foo.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) run
Starting program: /home/user/a.out
Breakpoint 1, main() at foo.c:6
6 strcpy(str_a, "Hello, world!\n");
(gdb) step
7 printf(str_a);
Должен ли я быть в библиотеке строк на этом этапе? Вместо этого он продолжает printf().
EDIT:
предложение Скотта "работал", но не в ожидаемом порядке.
Breakpoint 1, main() at foo.c:6
6 strcpy(str_a, "Hello, world!\n");
(gdb) i r $eip
eip 0x80484a1 0x80484a1 <main+21>
(gdb) step
Breakpoint 2, __strcpy_ssse3() at ../sysdeps/i386/i686/multiarch/strcpy-ssse3.S:78
78 ../sysdeps/i386/i686/multiarch/strcpy-ssse3.S: No such file or directory.
(gdb) i r $eip
eip 0xb7e9c820 0xb7e9c820 <__strcpy_ssse3>
Я удивлен каталог в 78
... ожидал что-то вроде: /lib/.../cmov/libc.so.6
. И утверждение, что нет такого файла или каталога.
@skirkpatrick: Это не так, по крайней мере, на большинстве систем (OS X, Debian, Ubuntu, Fedora. ..). Общие библиотеки * * скомпилированы с помощью отладочных символов. Реальный вопрос заключается в том, установлены ли эти символы. –
@ DietrichEpp: После быстрого поиска, похоже, что вы правы. Извините за дезинформацию; Я удалю свой комментарий. – skirkpatrick
Отладочные символы не являются частью .so, которые находятся в вашем LD_LIBRARY_PATH. Вместо этого они находятся в каталоге, который ищет gdb, например '/ usr/lib/debug'. Эту информацию можно получить, запустив 'show debug-file-directory' в' gdb'. Эти файлы содержат только отладочную информацию без каких-либо разделов '.text' или' .data' '.so'. И да, вам нужно установить их отдельно. – Tuxdude