2017-02-21 2 views
2

В моем двоичном коде используется несколько разных разделяемых библиотек. При подключении процесса с помощью gdb для загрузки и чтения символов из всех этих библиотек требуется около 5 минут.Как читать и загружать символы выборочно при присоединении процесса в gdb?

Есть ли способ выборочно читать и загружать символы при подключении процесса с помощью gdb?

ответ

4

Вы можете использовать set auto-solib-add off, а затем использовать команду sharedlibrary для выборочной загрузки символов. Пример:

$ gdb -e ./a.out 
(gdb) set auto-solib-add off 
(gdb) file a.out 
Reading symbols from a.out...done. 
(gdb) start 
Temporary breakpoint 1 at 0x4004ba: file sig.c, line 4. 
Starting program: /home/a3f/a.out 

Temporary breakpoint 1, main() at sig.c:4 
4  do(); 
(gdb) print environ 
No symbol "environ" in current context. 
(gdb) info shared 
From    To     Syms Read Shared Object Library 
0x00007ffff7ddcae0 0x00007ffff7df5130 No   /lib64/ld-linux-x86-64.so.2 
             No   linux-vdso.so.1 
0x00007ffff7a504a0 0x00007ffff7b7cc73 No   /lib/x86_64-linux-gnu/libc.so.6 
(gdb) sharedlibrary libc 
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.19.so...done. 
done. 
Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6 
(gdb) print environ 
$1 = (char **) 0x7fffffffe3b8 
(gdb) print _dl_open 
No symbol "_dl_open" in current context. 
(gdb) sharedlibrary 
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.19.so...done. 
done. 
Loaded symbols for /lib64/ld-linux-x86-64.so.2 
(gdb) print _dl_open 
$1 = {void *(const char *, int, const void *, Lmid_t, int, char **, char **)} 0x7ffff7dee350 <_dl_open> 
+0

Спасибо за ответ. Можно ли поделиться примером, когда мы присоединяем уже запущенный процесс с gdb? –

+1

@ KushalBansal 'gdb -ex 'установить auto-solib-add off' -p $ PID' –

Смежные вопросы