blob: 4a7a99d56f5f4a73ed4a4dcc3666c8eda6cf79ba [file] [log] [blame]
Greg Claytonb01a6542011-03-30 01:02:37 +00001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5<link href="style.css" rel="stylesheet" type="text/css" />
6<title>LLDB Goals</title>
7</head>
8
9<body>
10 <div class="www_title">
11 The <strong>LLDB</strong> Debugger
12 </div>
13
14<div id="container">
15 <div id="content">
16 <!--#include virtual="sidebar.incl"-->
17 <div id="middle">
18 <div class="post">
19 <h1 class ="postheader">LLDB to GDB Command Map</h1>
20 <div class="post">
21
22 <p>Below is a table of LLDB commands with the GDB counterparts.
23 The built in GDB compatability aliases in GDB are also
24 listed.</p>
25 </div>
26 <div class="postfooter"></div>
27
28 <h1 class ="postheader">Execution Commands</h1>
29 <div class="post">
30
31 <p>
32
33 <table class="stats" width="620" cellspacing="0">
34 <tr>
35 <td class="hed" width="50%">LLDB</td>
36 <td class="hed" width="50%">GDB</td>
37 </tr>
38
39 <tr><td class="header" colspan="2">Launch a process no arguments.</td></tr>
40 <td class="content">
41 <b>(lldb)</b> process launch<br>
42 <b>(lldb)</b> run<br>
43 <b>(lldb)</b> r
44 </td>
45 <td class="content">
46 <b>(gdb)</b> run<br>
47 <b>(gdb)</b> r
48 </td>
49 </tr>
50
51
52 <tr><td class="header" colspan="2">Launch a process with arguments <code>&lt;args&gt;</code>.</td></tr>
53 <td class="content">
54 <b>(lldb)</b> process launch -- &lt;args&gt;<br>
55 <b>(lldb)</b> run -- &lt;args&gt;<br>
56 <b>(lldb)</b> r &lt;args&gt;
57 </td>
58 <td class="content">
59 <b>(gdb)</b> run &lt;args&gt;<br>
60 <b>(gdb)</b> r &lt;args&gt;
61 </td>
62 </tr>
63
Greg Claytond0e6b572011-04-12 00:43:35 +000064 <tr><td class="header" colspan="2">Launch a process for with arguments <b><code>a.out 1 2 3</code></b> without having to supply the args every time.</td></tr>
65 <td class="content">
66 <b>%</b> lldb a.out 1 2 3<br>
67 <b>(lldb)</b> run<br>
68 ...<br>
69 <b>(lldb)</b> run<br>
70 ...<br>
71 </td>
72 <td class="content">
73 <b>%</b> gdb --args a.out 1 2 3<br>
74 <b>(gdb)</b> run<br>
75 ...<br>
76 <b>(gdb)</b> run<br>
77 ...<br>
78 </td>
79 </tr>
80
Greg Claytonb01a6542011-03-30 01:02:37 +000081 <tr><td class="header" colspan="2">Launch a process with arguments in new terminal window (Mac OS X only).</td></tr>
82 <td class="content">
83 <b>(lldb)</b> process launch --tty -- &lt;args&gt;<br>
84 <b>(lldb)</b> process launch -t -- &lt;args&gt;<br>
85 </td>
86 <td class="content">
87 </td>
88 </tr>
89
90 <tr><td class="header" colspan="2">Launch a process with arguments in existing terminal <cope>/dev/ttys006</code> (Mac OS X only).</td></tr>
91 <td class="content">
92 <b>(lldb)</b> process launch --tty=/dev/ttys006 -- &lt;args&gt;<br>
93 <b>(lldb)</b> process launch -t/dev/ttys006 -- &lt;args&gt;<br>
94 </td>
95 <td class="content">
96 </td>
97 </tr>
98
99 <tr><td class="header" colspan="2">Attach to a process with process ID 123.</td></tr>
100 <tr>
101 <td class="content">
102 <b>(lldb)</b> process attach --pid 123<br>
103 <b>(lldb)</b> attach -p 123
104 </td>
105 <td class="content">
106 <b>(gdb)</b> attach 123
107 </td>
108 </tr>
109
110 <tr><td class="header" colspan="2">Attach to a process named "a.out".</td></tr>
111 <tr>
112 <td class="content">
113 <b>(lldb)</b> process attach --name a.out<br>
114 <b>(lldb)</b> process attach -n a.out
115 </td>
116 <td class="content">
117 <b>(gdb)</b> attach a.out
118 </td>
119 </tr>
120
121 <tr><td class="header" colspan="2">Wait for a process named "a.out" to launch and attach.</td></tr>
122 <tr>
123 <td class="content">
124 <b>(lldb)</b> process attach --name a.out --waitfor<br>
125 <b>(lldb)</b> process attach -n a.out -w
126 </td>
127 <td class="content">
128 <b>(gdb)</b> attach -waitfor a.out
129 </td>
130 </tr>
131
132 <tr><td class="header" colspan="2">Do a source level single step in the currently selected thread.</td></tr>
133 <tr>
134 <td class="content">
135 <b>(lldb)</b> thread step-in<br>
136 <b>(lldb)</b> step<br>
137 <b>(lldb)</b> s
138 </td>
139 <td class="content">
140 <b>(gdb)</b> step<br>
141 <b>(gdb)</b> s
142 </td>
143 </tr>
144
145
146 <tr><td class="header" colspan="2">Do a source level single step over in the currently selected thread.</td></tr>
147 <tr>
148 <td class="content">
149 <b>(lldb)</b> thread step-over<br>
150 <b>(lldb)</b> next<br>
151 <b>(lldb)</b> n<br>
152 </td>
153 <td class="content">
154 <b>(gdb)</b> next<br>
155 <b>(gdb)</b> n
156 </td>
157 </tr>
158
159 <tr><td class="header" colspan="2">Do an instruction level single step in the currently selected thread.</td></tr>
160 <tr>
161 <td class="content">
162 <b>(lldb)</b> thread step-inst<br>
163 <b>(lldb)</b> si<br>
164 </td>
165 <td class="content">
166 <b>(gdb)</b> stepi<br>
167 <b>(gdb)</b> si
168 </td>
169 </tr>
170
171 <tr><td class="header" colspan="2">Do an instruction level single step over in the currently selected thread.</td></tr>
172 <tr>
173 <td class="content">
174 <b>(lldb)</b> thread step-inst-over<br>
175 </td>
176 <td class="content">
177 <b>(gdb)</b> nexti<br>
178 <b>(gdb)</b> ni
179 </td>
180 </tr>
181
182 <tr><td class="header" colspan="2">Step out of the currently selected frame.</td></tr>
183 <tr>
184 <td class="content">
185 <b>(lldb)</b> thread step-out<br>
186 <b>(lldb)</b> finish<br>
187 </td>
188 <td class="content">
189 <b>(gdb)</b> finish<br>
190 </td>
191 </tr>
192
193 </table>
194 <p>
195 </div>
196 <div class="postfooter"></div>
197
198 <h1 class ="postheader">Breakpoint Commands</h1>
199 <div class="post">
200
201 <p>
202
203 <table class="stats" width="620" cellspacing="0">
204 <tr>
205 <td class="hed" width="50%">LLDB</td>
206 <td class="hed" width="50%">GDB</td>
207 </tr>
208
209 <tr><td class="header" colspan="2">Set a breakpoint at all functions named <b>main</b>.</td></tr>
210 <tr>
211 <td class="content">
212 <b>(lldb)</b> breakpoint set --name main<br>
213 <b>(lldb)</b> breakpoint set -n main<br>
214 <b>(lldb)</b> b main
215 </td>
216 <td class="content">
217 <b>(lldb)</b> break main
218 </td>
219 </tr>
220
221 <tr><td class="header" colspan="2">Set a breakpoint in file <b>test.c</b> at line <b>12</b>.</td></tr>
222 <tr>
223 <td class="content">
224 <b>(lldb)</b> breakpoint set --file test.c --line 12<br>
225 <b>(lldb)</b> breakpoint set -f test.c -l 12<br>
226 <b>(lldb)</b> b test.c:12
227 </td>
228 <td class="content">
229 <b>(lldb)</b> break test.c:12
230 </td>
231 </tr>
232
233 <tr><td class="header" colspan="2">Set a breakpoint at all C++ methods whose basename is <b>main</b>.</td></tr>
234 <tr>
235 <td class="content">
236 <b>(lldb)</b> breakpoint set --method main<br>
237 <b>(lldb)</b> breakpoint set -M main<br>
238 </td>
239 <td class="content">
240 <b>(lldb)</b> break main<br>
241 <i>(Hope that there are no C funtions named <b>main</b>)</i>.
242 </td>
243 </tr>
244
245 <tr><td class="header" colspan="2">Set a breakpoint at all Objective C methods whose selector is <b>count</b>.</td></tr>
246 <tr>
247 <td class="content">
248 <b>(lldb)</b> breakpoint set --selector count<br>
249 <b>(lldb)</b> breakpoint set -S count<br>
250 </td>
251 <td class="content">
252 <b>(lldb)</b> break count<br>
253 <i>(Hope that there are no C or C++ funtions named <b>count</b>)</i>.
254 </td>
255 </tr>
256
257 </table>
258 <p>
259 </div>
260 <div class="postfooter"></div>
261
262 <h1 class ="postheader">Examining Thread State</h1>
263 <div class="post">
Greg Claytonb01a6542011-03-30 01:02:37 +0000264 <p>
Greg Claytonb01a6542011-03-30 01:02:37 +0000265 <table class="stats" width="620" cellspacing="0">
266 <tr>
267 <td class="hed" width="50%">LLDB</td>
268 <td class="hed" width="50%">GDB</td>
269 </tr>
270
271
272 <tr><td class="header" colspan="2">Show the arguments and local variables for the current frame.</td></tr>
273 <tr>
274 <td class="content">
275 <b>(lldb)</b> frame variable<br>
276 </td>
277 <td class="content">
278 <b>(gdb)</b> info args<br>
279 and<br>
280 <b>(gdb)</b> info locals<br>
281 </td>
282 </tr>
283
284 <tr><td class="header" colspan="2">Show the stack backtrace for the current thread.</td></tr>
285 <tr>
286 <td class="content">
287 <b>(lldb)</b> thread backtrace<br>
288 <b>(lldb)</b> bt<br>
289 </td>
290 <td class="content">
291 <b>(gdb)</b> bt<br>
292 </td>
293 </tr>
294
295 <tr><td class="header" colspan="2">Show the stack backtraces for all threads.</td></tr>
296 <tr>
297 <td class="content">
298 <b>(lldb)</b> thread backtrace all<br>
299 <b>(lldb)</b> bt all
300 </td>
301 <td class="content">
302 <b>(gdb)</b> thread apply all bt
303 </td>
304 </tr>
305
306 <tr><td class="header" colspan="2">Show all thread registers.</td></tr>
307 <tr>
308 <td class="content">
309 <b>(lldb)</b> register read
310 </td>
311 <td class="content">
312 <b>(gdb)</b> info all-registers
313 </td>
314 </tr>
315
316 <tr><td class="header" colspan="2">Show the values for the thread registers name "rax", "rsp" and "rbp".</td></tr>
317 <tr>
318 <td class="content">
319 <b>(lldb)</b> register read rax rsp rbp
320 </td>
321 <td class="content">
322 <b>(gdb)</b> info all-registers rax rsp rbp
323 </td>
324 </tr>
325
326 <tr><td class="header" colspan="2">Read memory from address 0xbffff3c0 and show 4 hex uint32_t values.</td></tr>
327 <tr>
328 <td class="content">
329 <b>(lldb)</b> memory read --size 4 --format x --count 4 0xbffff3c0<br>
Greg Claytond0e6b572011-04-12 00:43:35 +0000330 <b>(lldb)</b> memory read -s4 -fx -c4 0xbffff3c0<br>
331 <b>(lldb)</b> x -s4 -fx -c4 0xbffff3c0
Greg Claytonb01a6542011-03-30 01:02:37 +0000332 </td>
333 <td class="content">
334 <b>(gdb)</b> x/4xw 0xbffff3c0
335 </td>
336 </tr>
337
Greg Claytond0e6b572011-04-12 00:43:35 +0000338 <tr><td class="header" colspan="2">Read 512 bytes of memory from address 0xbffff3c0 and save results to a local file as <b>text</b>.</td></tr>
339 <tr>
Jim Ingham3dfeeec2011-06-15 21:01:30 +0000340 <td class="content">
Greg Claytond0e6b572011-04-12 00:43:35 +0000341 <b>(lldb)</b> memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0<br>
342 <b>(lldb)</b> memory read -o/tmp/mem.txt -c512 0xbffff3c0<br>
343 </td>
Jim Ingham3dfeeec2011-06-15 21:01:30 +0000344 <td class="content">
345 <b>(gdb)</b> set logging on<br>
346 <b>(gdb)</b> set logging file /tmp/mem.txt<br>
347 <b>(gdb)</b> x/512bx 0xbffff3c0<br>
348 <b>(gdb)</b> set logging off<br>
349 </td>
Greg Claytond0e6b572011-04-12 00:43:35 +0000350 </tr>
351
352 <tr><td class="header" colspan="2">Save binary memory data starting at 0x1000 and ending at 0x2000 to a file.</td></tr>
353 <tr>
354 <td class="content"colspan=2>
355 <b>(lldb)</b> memory read --outfile /tmp/mem.bin --binary 0x1000 0x1200<br>
356 <b>(lldb)</b> memory read -o /tmp/mem.bin -b 0x1000 0x1200<br>
357 </td>
358 </tr>
359
Greg Claytonb01a6542011-03-30 01:02:37 +0000360 <tr><td class="header" colspan="2">Disassemble the current function for the current frame.</td></tr>
361 <tr>
362 <td class="content">
363 <b>(lldb)</b> disassemble --frame<br>
364 <b>(lldb)</b> disassemble -f
365 </td>
366 <td class="content">
367 <b>(gdb)</b> disassemble
368 </td>
369 </tr>
370
371 <tr><td class="header" colspan="2">Disassemble any functions named <b>main</b>.</td></tr>
372 <tr>
373 <td class="content">
374 <b>(lldb)</b> disassemble --name main<br>
375 <b>(lldb)</b> disassemble -n main
376 </td>
377 <td class="content">
378 <b>(gdb)</b> disassemble main
379 </td>
380 </tr>
381
382 <tr><td class="header" colspan="2">Disassemble an address range.</td></tr>
383 <tr>
384 <td class="content">
Greg Claytond0e6b572011-04-12 00:43:35 +0000385 <b>(lldb)</b> disassemble --start-address 0x1eb8 --end-address 0x1ec3<br>
386 <b>(lldb)</b> disassemble -s 0x1eb8 -e 0x1ec3<br>
Greg Claytonb01a6542011-03-30 01:02:37 +0000387 </td>
388 <td class="content">
Greg Claytond0e6b572011-04-12 00:43:35 +0000389 <b>(gdb)</b> disassemble 0x1eb8 0x1ec3
Greg Claytonb01a6542011-03-30 01:02:37 +0000390 </td>
391 </tr>
392
Jim Ingham3dfeeec2011-06-15 21:01:30 +0000393 <tr><td class="header" colspan="2">Disassemble 20 instructions from a given address.</td></tr>
394 <tr>
395 <td class="content">
396 <b>(lldb)</b> disassemble --start-address 0x1eb8 --count 20<br>
397 <b>(lldb)</b> disassemble -s 0x1eb8 -c 20<br>
398 </td>
399 <td class="content">
400 <b>(gdb)</b> x/20i 0x1eb8
401 </td>
402 </tr>
403
Greg Claytonac241522011-04-05 21:40:10 +0000404 <tr><td class="header" colspan="2">Show mixed source and disassembly for the current function for the current frame.</td></tr>
Greg Claytonb01a6542011-03-30 01:02:37 +0000405 <tr>
406 <td class="content">
407 <b>(lldb)</b> disassemble --frame --mixed<br>
408 <b>(lldb)</b> disassemble -f -m
409 </td>
410 <td class="content">
411 n/a
412 </td>
413 </tr>
414
415 <tr><td class="header" colspan="2">Disassemble the current function for the current frame and show the opcode bytes.</td></tr>
416 <tr>
417 <td class="content">
418 <b>(lldb)</b> disassemble --frame --bytes<br>
419 <b>(lldb)</b> disassemble -f -b
420 </td>
421 <td class="content">
422 n/a
423 </td>
424 </tr>
425
426 <tr><td class="header" colspan="2">Disassemble the current source line for the current frame.</td></tr>
427 <tr>
428 <td class="content">
429 <b>(lldb)</b> disassemble --line<br>
430 <b>(lldb)</b> disassemble -l
431 </td>
432 <td class="content">
433 n/a
434 </td>
435 </tr>
436
437 </table>
438 <p>
439 </div>
440 <div class="postfooter"></div>
441
442 <h1 class ="postheader">Executable and Shared Library Query Commands</h1>
443 <div class="post">
444
445 <p>
446
447 <table class="stats" width="620" cellspacing="0">
448 <tr>
449 <td class="hed" width="50%">LLDB</td>
450 <td class="hed" width="50%">GDB</td>
451 </tr>
452
453
454 <tr><td class="header" colspan="2">List the main executable and all dependent shared libraries.</td></tr>
455 <tr>
456 <td class="content">
457 <b>(lldb)</b> image list<br>
458 </td>
459 <td class="content">
460 <b>(gdb)</b> info shared<br>
461 </td>
462 </tr>
463
464 <tr><td class="header" colspan="2">Lookup information for a raw address in the executable or any shared libraries.</td></tr>
465 <tr>
466 <td class="content">
467 <b>(lldb)</b> image lookup --address 0x1ec4<br>
468 <b>(lldb)</b> image lookup -a 0x1ec4<br>
469 </td>
470 <td class="content">
471 <b>(gdb)</b> info symbol 0x1ec4<br>
472 </td>
473 </tr>
474
Greg Claytond0e6b572011-04-12 00:43:35 +0000475 <tr><td class="header" colspan="2">Lookup information for an address in <b>a.out</a> only.</td></tr>
476 <tr>
477 <td class="content">
478 <b>(lldb)</b> image lookup --address 0x1ec4 a.out<br>
479 <b>(lldb)</b> image lookup -a 0x1ec4 a.out<br>
480 </td>
481 <td class="content">
482 </td>
483 </tr>
484
485 <tr><td class="header" colspan="2">Lookup information for for a type <code>Point</code> by name.</td></tr>
486 <tr>
487 <td class="content">
488 <b>(lldb)</b> image lookup --type Point<br>
489 <b>(lldb)</b> image lookup -t Point<br>
490 </td>
491 <td class="content">
492 <b>(lldb)</b> ptype Point<br>
493 </td>
494 </tr>
495
Greg Claytonb01a6542011-03-30 01:02:37 +0000496 <tr><td class="header" colspan="2">Dump all sections from the main executable and any shared libraries.</td></tr>
497 <tr>
498 <td class="content">
499 <b>(lldb)</b> image dump sections<br>
500 </td>
501 <td class="content">
502 <b>(gdb)</b> maintenance info sections<br>
503 </td>
504 </tr>
505
Greg Claytond0e6b572011-04-12 00:43:35 +0000506 <tr><td class="header" colspan="2">Dump all sections in the <b>a.out</b> module.</td></tr>
507 <tr>
508 <td class="content">
509 <b>(lldb)</b> image dump sections a.out<br>
510 </td>
511 <td class="content">
512 </td>
513 </tr>
514
515 <tr><td class="header" colspan="2">Dump all symbols from the main executable and any shared libraries.</td></tr>
516 <tr>
517 <td class="content">
518 <b>(lldb)</b> image dump symtab<br>
519 </td>
520 <td class="content">
521 </td>
522 </tr>
523
524 <tr><td class="header" colspan="2">Dump all symbols in <b>a.out</b> and <b>liba.so</b>.</td></tr>
525 <tr>
526 <td class="content">
527 <b>(lldb)</b> image dump symtab a.out liba.so<br>
528 </td>
529 <td class="content">
530 </td>
531 </tr>
532
Greg Claytonb01a6542011-03-30 01:02:37 +0000533 </table>
534 <p>
535 </div>
536 <div class="postfooter"></div>
537
538 <p>
539
540
541 </div>
542 </div>
543 </div>
544</div>
545</body>
546</html>