Perintah set solib-search-path
Menentukan direktori-direktori tempat GDB akan mencari shared libraries dengan simbol-simbolnya. Opsi ini berguna saat debugging dengan gdbserver.
Sintaksis
show solib-search-path
Parameter
- Direktori-direktori
- Menentukan daftar direktori yang dipisahkan oleh titik dua (:) di Linux atau titik koma (;) di Windows tempat GDB akan mencari shared libraries saat mencari simbol-simbolnya.
Penggunaan umum
Perintah ini berguna saat debugging program remote via gdbserver. Jika jalur shared library di komputer remote dan komputer GDB berbeda, GDB tidak akan secara otomatis menemukan salinan lokal dari library tersebut dan memuat simbol-simbolnya kecuali direktori yang berisikan library tersebut di spesifikasikan di set solib-search-path.
Contoh, jika Anda telah menyalin /home/testuser/libtest/libTest.so di komputer dengan GDB ke /tmp/libTest.so di komputer dengan GDBServer, Anda perlu menentukan set solib-search-path /home/testuser/libtest agar simbol-simbol dapat dimuat.
Nilai Default
Nilai default untuk variabel solib-search-path adalah "." yang sesuai dengan direktori kerja GDB (direktori tempat GDB diluncurkan kecuali diubah menggunakan perintah cd).
Contoh
Pada contoh ini, kita akan melakukan debugging sebuah shared library sederhana dengan gdbserver:
#include
int func()
{
printf("Di dalam func()\n");
return 0;
}
Kita akan menggunakan program sederhana untuk menguji library kita:
#include
int func();
int main()
{
printf("Di dalam main()\n");
func();
return 0;
}
Pertama, kita membangun aplikasi dan library serta mendeploynya ke mesin lain:
cd /home/testuser/libtest
g++ -ggdb -fPIC -shared lib.cpp -o libTest.so
g++ -ggdb main.cpp libTest.so -o testApp -Wl,--rpath='$ORIGIN'
scp testApp libTest.so deploy_machine:/tmp
Lalu kita jalankan gdbserver di mesin deploy_machine:
cd /tmp
gdbserver :2000 testApp
Terakhir, kita jalankan GDB dari direktori lain (jika tidak, GDB masih akan menemukan libTest.so):
cd /
gdb /home/testuser/libtest/testApp
Sekarang kita akan mencoba untuk menetapkan breakpoint di dalam libTest.so (yang akan gagal karena /tmp/libTest.so tidak dimuat secara awal). Perhatikan bagaimana menentukan set solib-search-path memungkinkan GDB untuk memuat simbol-simbol dan menetapkan breakpoint:
(gdb) target remote deploy_machine:2000
Remote debugging using deploy_machine:2000
Reading symbols from /lib/ld-linux.so.2...
Reading symbols from /usr/lib/debug/lib/i386-linux-gnu/ld-2.15.so...done.
done.
Loaded symbols for /lib/ld-linux.so.2
(gdb) break main
Breakpoint 1 at 0x80484ed: file main.cpp, line 7.
(gdb) continue
Continuing.
Breakpoint 1, main () at main.cpp:7
7 printf("Di dalam main()\n");
(gdb) break func
Function "func" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) info sharedlibrary
warning: Could not load shared library symbols for /tmp/libTest.so.
Do you need "set solib-search-path" or "set sysroot"?
From To Syms Read Shared Object Library
0x0019b820 0x001b3b9f Yes /lib/ld-linux.so.2
No /tmp/libTest.so
0x004bcf10 0x005f15cc No /lib/i386-linux-gnu/libc.so.6
(gdb) set solib-search-path /home/testuser/libtest
Reading symbols from /home/testuser/libtest/libTest.so...done.
Loaded symbols for /home/testuser/libtest/libTest.so
Reading symbols from /lib/i386-linux-gnu/libc.so.6...
Reading symbols from /usr/lib/debug/lib/i386-linux-gnu/libc-2.15.so...done.
done.
Loaded symbols for /lib/i386-linux-gnu/libc.so.6
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0x0019b820 0x001b3b9f Yes /lib/ld-linux.so.2
0x00f893a0 0x00f894c8 Yes /home/testuser/libtest/libTest.so
0x004bcf10 0x005f15cc Yes /lib/i386-linux-gnu/libc.so.6
(gdb) break func
Breakpoint 2 at 0xf8946e: file lib.cpp, line 5.
(gdb) continue
Continuing.
Breakpoint 2, func () at lib.cpp:5
5 printf("Di dalam func()\n");
(gdb) backtrace
#0 func () at lib.cpp:5
#1 0x080484fe in main () at main.cpp:8