blob: d3cd221b20300655d2fa76c07236a3fe1cf2773a [file] [log] [blame]
Jason Molendac09b8b92011-10-22 02:31:42 +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
64 <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
81 <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 <b>(lldb)</b> ni
176 </td>
177 <td class="content">
178 <b>(gdb)</b> nexti<br>
179 <b>(gdb)</b> ni
180 </td>
181 </tr>
182
183 <tr><td class="header" colspan="2">Step out of the currently selected frame.</td></tr>
184 <tr>
185 <td class="content">
186 <b>(lldb)</b> thread step-out<br>
187 <b>(lldb)</b> finish<br>
188 </td>
189 <td class="content">
190 <b>(gdb)</b> finish<br>
191 </td>
192 </tr>
193
194 <tr><td class="header" colspan="2">Display a the variable "argc" and "argv" everytime you stop.</td></tr>
195 <tr>
196 <td class="content">
197 <b>(lldb)</b> target stop-hook add --one-liner "frame variable argc argv"<br>
198 <b>(lldb)</b> ta st a -o "fr v argc argv"<br>
199 </td>
200 <td class="content">
201 <b>(gdb)</b> display argc<br>
202 <b>(gdb)</b> display argv<br>
203 </td>
204 </tr>
205
206 <tr><td class="header" colspan="2">Display a the variable "argc" and "argv" only when you stop in the function named <b>main</b>.</td></tr>
207 <tr>
208 <td class="content" colspan="2">
209 <b>(lldb)</b> target stop-hook add --name main --one-liner "frame variable argc argv"<br>
210 <b>(lldb)</b> ta st a -n main -o "fr v argc argv"<br>
211 </td>
212 </tr>
213
214 <tr><td class="header" colspan="2">Display the variable "*this" only when you stop in c class named <b>MyClass</b>.</td></tr>
215 <tr>
216 <td class="content" colspan="2">
217 <b>(lldb)</b> target stop-hook add --classname MyClass --one-liner "frame variable *this"<br>
218 </td>
219 </tr>
220
221 <tr><td class="header" colspan="2">Backtrace and disassemble every time you stop.</td></tr>
222 <tr>
223 <td class="content" colspan="2">
224 <b>(lldb)</b> target stop-hook add<br>
225 Enter your stop hook command(s). Type 'DONE' to end.<br>
226 &gt; bt<br>
227 &gt; disassemble --pc<br>
228 &gt; DONE<br>
229 Stop hook #1 added.<br>
230 </td>
231 </tr>
232
233 </table>
234 <p>
235 </div>
236 <div class="postfooter"></div>
237
238 <h1 class ="postheader">Breakpoint Commands</h1>
239 <div class="post">
240
241 <p>
242
243 <table class="stats" width="620" cellspacing="0">
244 <tr>
245 <td class="hed" width="50%">LLDB</td>
246 <td class="hed" width="50%">GDB</td>
247 </tr>
248
249 <tr><td class="header" colspan="2">Set a breakpoint at all functions named <b>main</b>.</td></tr>
250 <tr>
251 <td class="content">
252 <b>(lldb)</b> breakpoint set --name main<br>
253 <b>(lldb)</b> br s -n main<br>
254 <b>(lldb)</b> b main
255 </td>
256 <td class="content">
257 <b>(lldb)</b> break main
258 </td>
259 </tr>
260
261 <tr><td class="header" colspan="2">Set a breakpoint in file <b>test.c</b> at line <b>12</b>.</td></tr>
262 <tr>
263 <td class="content">
264 <b>(lldb)</b> breakpoint set --file test.c --line 12<br>
265 <b>(lldb)</b> breakpoint set -f test.c -l 12<br>
266 <b>(lldb)</b> b test.c:12
267 </td>
268 <td class="content">
269 <b>(lldb)</b> break test.c:12
270 </td>
271 </tr>
272
273 <tr><td class="header" colspan="2">Set a breakpoint at all C++ methods whose basename is <b>main</b>.</td></tr>
274 <tr>
275 <td class="content">
276 <b>(lldb)</b> breakpoint set --method main<br>
277 <b>(lldb)</b> breakpoint set -M main<br>
278 </td>
279 <td class="content">
280 <b>(lldb)</b> break main<br>
281 <i>(Hope that there are no C funtions named <b>main</b>)</i>.
282 </td>
283 </tr>
284
285 <tr><td class="header" colspan="2">Set a breakpoint at all Objective C methods whose selector is <b>count</b>.</td></tr>
286 <tr>
287 <td class="content">
288 <b>(lldb)</b> breakpoint set --selector count<br>
289 <b>(lldb)</b> breakpoint set -S count<br>
290 </td>
291 <td class="content">
292 <b>(lldb)</b> break count<br>
293 <i>(Hope that there are no C or C++ funtions named <b>count</b>)</i>.
294 </td>
295 </tr>
296
297 </table>
298 <p>
299 </div>
300 <div class="postfooter"></div>
301
302 <h1 class ="postheader">Examining Thread State</h1>
303 <div class="post">
304 <p>
305 <table class="stats" width="620" cellspacing="0">
306 <tr>
307 <td class="hed" width="50%">LLDB</td>
308 <td class="hed" width="50%">GDB</td>
309 </tr>
310
311
312 <tr><td class="header" colspan="2">Show the arguments and local variables for the current frame.</td></tr>
313 <tr>
314 <td class="content">
315 <b>(lldb)</b> frame variable<br>
316 </td>
317 <td class="content">
318 <b>(gdb)</b> info args<br>
319 and<br>
320 <b>(gdb)</b> info locals<br>
321 </td>
322 </tr>
323
324 <tr><td class="header" colspan="2">Show the stack backtrace for the current thread.</td></tr>
325 <tr>
326 <td class="content">
327 <b>(lldb)</b> thread backtrace<br>
328 <b>(lldb)</b> bt<br>
329 </td>
330 <td class="content">
331 <b>(gdb)</b> bt<br>
332 </td>
333 </tr>
334
335 <tr><td class="header" colspan="2">Show the stack backtraces for all threads.</td></tr>
336 <tr>
337 <td class="content">
338 <b>(lldb)</b> thread backtrace all<br>
339 <b>(lldb)</b> bt all
340 </td>
341 <td class="content">
342 <b>(gdb)</b> thread apply all bt
343 </td>
344 </tr>
345
346 <tr><td class="header" colspan="2">Select a different stack frame by index for the current thread.</td></tr>
347 <tr>
348 <td class="content">
349 <b>(lldb)</b> frame select 12<br>
350 </td>
351 <td class="content">
352 <b>(gdb)</b> frame 12
353 </td>
354 </tr>
355
356 <tr><td class="header" colspan="2">Select the stack frame that called the current stack frame.</td></tr>
357 <tr>
358 <td class="content">
359 <b>(lldb)</b> up<br>
360 <b>(lldb)</b> frame select --relative=1<br>
361 </td>
362 <td class="content">
363 <b>(gdb)</b> up
364 </td>
365 </tr>
366
367 <tr><td class="header" colspan="2">Select the stack frame that is called by the current stack frame.</td></tr>
368 <tr>
369 <td class="content">
370 <b>(lldb)</b> down<br>
371 <b>(lldb)</b> frame select --relative=-1<br>
372 <b>(lldb)</b> frame select -r-1<br>
373 </td>
374 <td class="content">
375 <b>(gdb)</b> down
376 </td>
377 </tr>
378
379 <tr><td class="header" colspan="2">Select a different stack frame using a relative offset.</td></tr>
380 <tr>
381 <td class="content">
382 <b>(lldb)</b> frame select --relative 2<br>
383 <b>(lldb)</b> frame select -r2<br>
384 <br>
385 <b>(lldb)</b> frame select --relative -3<br>
386 <b>(lldb)</b> frame select -r-3<br>
387 </td>
388 <td class="content">
389 <b>(gdb)</b> up 2<br>
390 <b>(gdb)</b> down 3<br>
391 </td>
392 </tr>
393
394 <tr><td class="header" colspan="2">Show the general purpose registers for the current thread.</td></tr>
395 <tr>
396 <td class="content">
397 <b>(lldb)</b> register read<br>
398 </td>
399 <td class="content">
400 <b>(gdb)</b> info registers<br>
401 </td>
402 </tr>
403
404 <tr><td class="header" colspan="2">Show the general purpose registers for the current thread formatted as <b>unsigned decimal</b>. LLDB tries to use
405 the same format characters as <b>printf</b> when possible.</td></tr>
406 <tr>
407 <td class="content">
408 <b>(lldb)</b> register read --format i<br>
409 <b>(lldb)</b> register read -f i<br>
410 </td>
411 <td class="content">
412 </td>
413 </tr>
414
415 <tr><td class="header" colspan="2">Show all registers in all register sets for the current thread.</td></tr>
416 <tr>
417 <td class="content">
418 <b>(lldb)</b> register read --all<br>
419 <b>(lldb)</b> register read -a<br>
420 </td>
421 <td class="content">
422 <b>(gdb)</b> info all-registers<br>
423 </td>
424 </tr>
425
426 <tr><td class="header" colspan="2">Show the values for the registers named "rax", "rsp" and "rbp" in the current thread.</td></tr>
427 <tr>
428 <td class="content">
429 <b>(lldb)</b> register read rax rsp rbp<br>
430 </td>
431 <td class="content">
432 <b>(gdb)</b> info all-registers rax rsp rbp<br>
433 </td>
434 </tr>
435
436 <tr><td class="header" colspan="2">Show the values for the register named "rax" in the current thread formatted as <b>binary</b>.</td></tr>
437 <tr>
438 <td class="content">
439 <b>(lldb)</b> register read --format binary rax<br>
440 <b>(lldb)</b> register read -f b rax<br>
441 </td>
442 <td class="content">
443 <b>(gdb)</b> p/t $rax<br>
444 </td>
445 </tr>
446
447 <tr><td class="header" colspan="2">Read memory from address 0xbffff3c0 and show 4 hex uint32_t values.</td></tr>
448 <tr>
449 <td class="content">
450 <b>(lldb)</b> memory read --size 4 --format x --count 4 0xbffff3c0<br>
451 <b>(lldb)</b> memory read -s4 -fx -c4 0xbffff3c0<br>
452 <b>(lldb)</b> x -s4 -fx -c4 0xbffff3c0<br>
453 </td>
454 <td class="content">
455 <b>(gdb)</b> x/4xw 0xbffff3c0<br>
456 </td>
457 </tr>
458
459 <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>
460 <tr>
461 <td class="content">
462 <b>(lldb)</b> memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0<br>
463 <b>(lldb)</b> memory read -o/tmp/mem.txt -c512 0xbffff3c0<br>
464 </td>
465 <td class="content">
466 <b>(gdb)</b> set logging on<br>
467 <b>(gdb)</b> set logging file /tmp/mem.txt<br>
468 <b>(gdb)</b> x/512bx 0xbffff3c0<br>
469 <b>(gdb)</b> set logging off<br>
470 </td>
471 </tr>
472
473 <tr><td class="header" colspan="2">Save binary memory data starting at 0x1000 and ending at 0x2000 to a file.</td></tr>
474 <tr>
475 <td class="content"colspan=2>
476 <b>(lldb)</b> memory read --outfile /tmp/mem.bin --binary 0x1000 0x1200<br>
477 <b>(lldb)</b> memory read -o /tmp/mem.bin -b 0x1000 0x1200<br>
478 </td>
479 </tr>
480
481 <tr><td class="header" colspan="2">Disassemble the current function for the current frame.</td></tr>
482 <tr>
483 <td class="content">
484 <b>(lldb)</b> disassemble --frame<br>
485 <b>(lldb)</b> disassemble -f
486 </td>
487 <td class="content">
488 <b>(gdb)</b> disassemble
489 </td>
490 </tr>
491
492 <tr><td class="header" colspan="2">Disassemble any functions named <b>main</b>.</td></tr>
493 <tr>
494 <td class="content">
495 <b>(lldb)</b> disassemble --name main<br>
496 <b>(lldb)</b> disassemble -n main
497 </td>
498 <td class="content">
499 <b>(gdb)</b> disassemble main
500 </td>
501 </tr>
502
503 <tr><td class="header" colspan="2">Disassemble an address range.</td></tr>
504 <tr>
505 <td class="content">
506 <b>(lldb)</b> disassemble --start-address 0x1eb8 --end-address 0x1ec3<br>
507 <b>(lldb)</b> disassemble -s 0x1eb8 -e 0x1ec3<br>
508 </td>
509 <td class="content">
510 <b>(gdb)</b> disassemble 0x1eb8 0x1ec3
511 </td>
512 </tr>
513
514 <tr><td class="header" colspan="2">Disassemble 20 instructions from a given address.</td></tr>
515 <tr>
516 <td class="content">
517 <b>(lldb)</b> disassemble --start-address 0x1eb8 --count 20<br>
518 <b>(lldb)</b> disassemble -s 0x1eb8 -c 20<br>
519 </td>
520 <td class="content">
521 <b>(gdb)</b> x/20i 0x1eb8
522 </td>
523 </tr>
524
525 <tr><td class="header" colspan="2">Show mixed source and disassembly for the current function for the current frame.</td></tr>
526 <tr>
527 <td class="content">
528 <b>(lldb)</b> disassemble --frame --mixed<br>
529 <b>(lldb)</b> disassemble -f -m
530 </td>
531 <td class="content">
532 n/a
533 </td>
534 </tr>
535
536 <tr><td class="header" colspan="2">Disassemble the current function for the current frame and show the opcode bytes.</td></tr>
537 <tr>
538 <td class="content">
539 <b>(lldb)</b> disassemble --frame --bytes<br>
540 <b>(lldb)</b> disassemble -f -b
541 </td>
542 <td class="content">
543 n/a
544 </td>
545 </tr>
546
547 <tr><td class="header" colspan="2">Disassemble the current source line for the current frame.</td></tr>
548 <tr>
549 <td class="content">
550 <b>(lldb)</b> disassemble --line<br>
551 <b>(lldb)</b> disassemble -l
552 </td>
553 <td class="content">
554 n/a
555 </td>
556 </tr>
557
558 </table>
559 <p>
560 </div>
561 <div class="postfooter"></div>
562
563 <h1 class ="postheader">Executable and Shared Library Query Commands</h1>
564 <div class="post">
565
566 <p>
567
568 <table class="stats" width="620" cellspacing="0">
569 <tr>
570 <td class="hed" width="50%">LLDB</td>
571 <td class="hed" width="50%">GDB</td>
572 </tr>
573
574
575 <tr><td class="header" colspan="2">List the main executable and all dependent shared libraries.</td></tr>
576 <tr>
577 <td class="content">
578 <b>(lldb)</b> image list<br>
579 </td>
580 <td class="content">
581 <b>(gdb)</b> info shared<br>
582 </td>
583 </tr>
584
585 <tr><td class="header" colspan="2">Lookup information for a raw address in the executable or any shared libraries.</td></tr>
586 <tr>
587 <td class="content">
588 <b>(lldb)</b> image lookup --address 0x1ec4<br>
589 <b>(lldb)</b> image lookup -a 0x1ec4<br>
590 </td>
591 <td class="content">
592 <b>(gdb)</b> info symbol 0x1ec4<br>
593 </td>
594 </tr>
595
596 <tr><td class="header" colspan="2">Lookup information for an address in <b>a.out</a> only.</td></tr>
597 <tr>
598 <td class="content">
599 <b>(lldb)</b> image lookup --address 0x1ec4 a.out<br>
600 <b>(lldb)</b> image lookup -a 0x1ec4 a.out<br>
601 </td>
602 <td class="content">
603 </td>
604 </tr>
605
606 <tr><td class="header" colspan="2">Lookup information for for a type <code>Point</code> by name.</td></tr>
607 <tr>
608 <td class="content">
609 <b>(lldb)</b> image lookup --type Point<br>
610 <b>(lldb)</b> image lookup -t Point<br>
611 </td>
612 <td class="content">
613 <b>(lldb)</b> ptype Point<br>
614 </td>
615 </tr>
616
617 <tr><td class="header" colspan="2">Dump all sections from the main executable and any shared libraries.</td></tr>
618 <tr>
619 <td class="content">
620 <b>(lldb)</b> image dump sections<br>
621 </td>
622 <td class="content">
623 <b>(gdb)</b> maintenance info sections<br>
624 </td>
625 </tr>
626
627 <tr><td class="header" colspan="2">Dump all sections in the <b>a.out</b> module.</td></tr>
628 <tr>
629 <td class="content">
630 <b>(lldb)</b> image dump sections a.out<br>
631 </td>
632 <td class="content">
633 </td>
634 </tr>
635
636 <tr><td class="header" colspan="2">Dump all symbols from the main executable and any shared libraries.</td></tr>
637 <tr>
638 <td class="content">
639 <b>(lldb)</b> image dump symtab<br>
640 </td>
641 <td class="content">
642 </td>
643 </tr>
644
645 <tr><td class="header" colspan="2">Dump all symbols in <b>a.out</b> and <b>liba.so</b>.</td></tr>
646 <tr>
647 <td class="content">
648 <b>(lldb)</b> image dump symtab a.out liba.so<br>
649 </td>
650 <td class="content">
651 </td>
652 </tr>
653
654 </table>
655 <p>
656 </div>
657 <div class="postfooter"></div>
658
659 <p>
660
661
662 </div>
663 </div>
664 </div>
665</div>
666</body>
667</html>