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

set solib-search-path [Direktori-direktori]
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