perintah set auto-solib-add
Menentukan apakah GDB harus secara otomatis memuat simbol saat mendeteksi bahwa sebuah pustaka bersama telah dimuat.
Sintaks
set auto-solib-add on
set auto-solib-add off
show auto-solib-add
set auto-solib-add off
show auto-solib-add
Mode
- on
- Dalam mode ini, GDB akan secara otomatis memuat simbol-simbol saat mendeteksi bahwa sebuah pustaka bersama telah dimuat.
- off
- Dalam mode ini, GDB tidak akan secara otomatis memuat simbol-simbol untuk pustaka bersama yang baru dimuat. Anda dapat memuat simbol-simbol secara manual menggunakan perintah sharedlibrary.
Nilai Default
Nilai default untuk variabel auto-solib-add adalah on.
Contoh
Pada contoh ini, kita akan melakukan debug pada program sederhana yang memuat dan membebaskan (unload) sebuah pustaka bersama secara berulang:
#include
#include
int main()
{
for (int i = 0; i < 5; i++)
{
void *p = dlopen("./libTest.so", RTLD_NOW);
printf("Loaded library\n");
dlclose(p);
printf("Unloaded library\n");
}
return 0;
}
Contoh berikut menunjukkan bagaimana perintah set auto-solib-add dapat menonaktifkan pembebanan simbol secara otomatis yang biasanya dilakukan oleh GDB:
(gdb) break 8
Breakpoint 1 at 0x80484b7: file main.cpp, line 8.
(gdb) run
Starting program: /home/testuser/libtest/testApp
Breakpoint 1, main () at main.cpp:8
8 void *p = dlopen("./libTest.so", RTLD_NOW);
(gdb) info shared
From To Syms Read Shared Object Library
0xb7fde820 0xb7ff6b9f Yes /lib/ld-linux.so.2
0xb7fc2a60 0xb7fc3a08 Yes /lib/i386-linux-gnu/libdl.so.2
0xb7e2ef10 0xb7f635cc Yes /lib/i386-linux-gnu/libc.so.6
(gdb) next
9 printf("Loaded library\n");
(gdb) info shared
From To Syms Read Shared Object Library
0xb7fde820 0xb7ff6b9f Yes /lib/ld-linux.so.2
0xb7fc2a60 0xb7fc3a08 Yes /lib/i386-linux-gnu/libdl.so.2
0xb7e2ef10 0xb7f635cc Yes /lib/i386-linux-gnu/libc.so.6
0xb7fd83a0 0xb7fd84c8 Yes ./libTest.so
(gdb) continue
Continuing.
Loaded library
Unloaded library
Breakpoint 1, main () at main.cpp:8
8 void *p = dlopen("./libTest.so", RTLD_NOW);
(gdb) info shared
From To Syms Read Shared Object Library
0xb7fde820 0xb7ff6b9f Yes /lib/ld-linux.so.2
0xb7fc2a60 0xb7fc3a08 Yes /lib/i386-linux-gnu/libdl.so.2
0xb7e2ef10 0xb7f635cc Yes /lib/i386-linux-gnu/libc.so.6
(gdb) set auto-solib-add off
(gdb) next
9 printf("Loaded library\n");
(gdb) info shared
From To Syms Read Shared Object Library
0xb7fde820 0xb7ff6b9f Yes /lib/ld-linux.so.2
0xb7fc2a60 0xb7fc3a08 Yes /lib/i386-linux-gnu/libdl.so.2
0xb7e2ef10 0xb7f635cc Yes /lib/i386-linux-gnu/libc.so.6
0xb7fd83a0 0xb7fd84c8 No ./libTest.so
(gdb) sharedlibrary
Reading symbols from ./libTest.so...done.
Loaded symbols for ./libTest.so
(gdb) info shared
From To Syms Read Shared Object Library
0xb7fde820 0xb7ff6b9f Yes /lib/ld-linux.so.2
0xb7fc2a60 0xb7fc3a08 Yes /lib/i386-linux-gnu/libdl.so.2
0xb7e2ef10 0xb7f635cc Yes /lib/i386-linux-gnu/libc.so.6
0xb7fd83a0 0xb7fd84c8 Yes ./libTest.so