難以進入GDB 7.5中的string.h
。這裏有一個簡單的例子程序:無法使用GDB進入string.h函數
的源代碼:
#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()。
編輯:
斯科特的建議 「工作」,而不是預期的方式。
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的。 ..)。共享庫*使用調試符號編譯。真正的問題是這些符號是否已安裝。 – 2013-03-09 01:33:46
@DietrichEpp:快速搜索後,看起來你是對的。對錯誤信息抱歉;我會刪除我的評論。 – skirkpatrick 2013-03-09 01:38:53
調試符號不是駐留在LD_LIBRARY_PATH中的.so的一部分。相反,它們駐留在gdb所搜索的目錄中,如'/ usr/lib/debug'。這個信息可以通過在'gdb'中運行'show debug-file-directory'獲得。這些文件僅包含調試信息,不包含'.so'的'.text'或'.data'部分。是的,你需要分別安裝它們。 – Tuxdude 2013-03-09 01:49:49