Có rắc rối bước vào string.h
trong GDB 7.5. Dưới đây là một ví dụ đơn giản chương trình: MãKhông thể bước vào chức năng string.h với GDB
Nguồn:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20];
strcpy(str1, "STEP INTO ME\n");
printf(str1);
}
Biên soạn:~$ gcc -g foo.c
Được triệu gọi:~$ 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);
nên tôi không có trong thư viện string vào thời điểm này? Thay vào đó nó tiếp tục với printf().
EDIT:
gợi ý của Scott "làm việc", nhưng không phải theo cách thức dự kiến.
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>
Tôi ngạc nhiên tại thư mục ở 78
... mong đợi điều gì đó như: /lib/.../cmov/libc.so.6
. Và tuyên bố rằng không có tệp hoặc thư mục như vậy.
@skirkpatrick: Đây là sai, ít nhất là trên hầu hết các hệ thống (OS X, Debian, Ubuntu, Fedora. ..). Thư viện được chia sẻ * được biên dịch với các biểu tượng gỡ lỗi. Câu hỏi thực sự là liệu các biểu tượng đó có được cài đặt hay không. –
@DietrichEpp: Sau khi tìm kiếm nhanh, có vẻ như bạn đã đúng. Xin lỗi vì thông tin sai lạc; Tôi sẽ xóa nhận xét của tôi. – skirkpatrick
Các biểu tượng gỡ lỗi không phải là một phần của .so nằm trong LD_LIBRARY_PATH của bạn. Thay vào đó chúng nằm trong một thư mục mà gdb tìm kiếm như '/ usr/lib/debug'. Thông tin này có thể thu được bằng cách chạy 'show debug-file-directory' trong' gdb'. Các tệp này chỉ chứa thông tin gỡ lỗi mà không có bất kỳ phần '.text' hoặc' .data' nào của '.so'. Và có bạn cần phải cài đặt chúng một cách riêng biệt. – Tuxdude