-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathset_solib-search-path.htm
147 lines (139 loc) · 6.38 KB
/
set_solib-search-path.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Referensi Perintah GDB - set solib-search-path</title>
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-xs-12">
<div class="main">
<h2>Perintah set solib-search-path</h2>
<p>Menentukan direktori-direktori tempat GDB akan mencari shared libraries dengan simbol-simbolnya. Opsi ini berguna saat debugging dengan gdbserver.</p>
<h4>Sintaksis</h4>
<div class="syntax">
<b>set</b> solib-search-path [<i>Direktori-direktori</i>]<br/>
<b>show</b> solib-search-path<br/>
</div>
<p></p>
<h4>Parameter</h4>
<dl>
<dt>Direktori-direktori</dt>
<dd>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.</dd>
</dl>
<p></p>
<h4>Penggunaan umum</h4>
<p>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 <b>set solib-search-path</b>.</p>
<p>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 <b>set solib-search-path /home/testuser/libtest</b> agar simbol-simbol dapat dimuat.</p>
<p></p>
<h4>Nilai Default</h4>
<p>Nilai default untuk variabel <b>solib-search-path</b> adalah "." yang sesuai dengan direktori kerja GDB (direktori tempat GDB diluncurkan kecuali diubah menggunakan perintah <b>cd</b>).</p>
<p></p>
<h4>Contoh</h4>
<p>Pada contoh ini, kita akan melakukan debugging sebuah shared library sederhana dengan gdbserver:</p>
<pre>
<code>
#include <stdio.h>
int func()
{
printf("Di dalam func()\n");
return 0;
}
</code>
</pre>
<p></p>
<p>Kita akan menggunakan program sederhana untuk menguji library kita:</p>
<pre>
<code>
#include <stdio.h>
int func();
int main()
{
printf("Di dalam main()\n");
func();
return 0;
}
</code>
</pre>
<p></p>
<p>Pertama, kita membangun aplikasi dan library serta mendeploynya ke mesin lain:</p>
<pre>
<code>
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
</code>
</pre>
<p></p>
<p>Lalu kita jalankan gdbserver di mesin <b>deploy_machine</b>:</p>
<pre>
<code>
cd /tmp
gdbserver :2000 testApp
</code>
</pre>
<p></p>
<p>Terakhir, kita jalankan GDB dari direktori lain (jika tidak, GDB masih akan menemukan libTest.so):</p>
<pre>
<code>
cd /
gdb /home/testuser/libtest/testApp
</code>
</pre>
<p></p>
<p>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 <b>set solib-search-path</b> memungkinkan GDB untuk memuat simbol-simbol dan menetapkan breakpoint:</p>
<pre>
<code>
(gdb) <b>target remote deploy_machine:2000</b>
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) <b>break main</b>
Breakpoint 1 at 0x80484ed: file main.cpp, line 7.
(gdb) <b>continue</b>
Continuing.
Breakpoint 1, main () at main.cpp:7
7 printf("Di dalam main()\n");
(gdb) <b>break func</b>
Function "func" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) <b>info sharedlibrary</b>
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) <b>set solib-search-path /home/testuser/libtest</b>
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) <b>info sharedlibrary</b>
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) <b>break func</b>
Breakpoint 2 at 0xf8946e: file lib.cpp, line 5.
(gdb) <b>continue</b>
Continuing.
Breakpoint 2, func () at lib.cpp:5
5 printf("Di dalam func()\n");
(gdb) <b>backtrace</b>
#0 func () at lib.cpp:5
#1 0x080484fe in main () at main.cpp:8
</code>
</pre>
<p></p>
</div>
</div>
</div>
</div>
</body>
</html>