xref: /openbsd-src/gnu/llvm/lldb/docs/use/map.rst (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1GDB to LLDB command map
2=======================
3
4Below is a table of GDB commands with their LLDB counterparts. The built in
5GDB-compatibility aliases in LLDB are also listed. The full lldb command names
6are often long, but any unique short form can be used. Instead of "**breakpoint
7set**", "**br se**" is also acceptable.
8
9.. contents::
10   :local:
11
12Execution Commands
13------------------
14
15.. raw:: html
16
17   <table class="mapping" cellspacing="0">
18      <tbody>
19         <tr>
20               <td class="hed" width="50%">GDB</td>
21               <td class="hed" width="50%">LLDB</td>
22         </tr>
23
24         <tr>
25               <td class="header" colspan="2">Launch a process no arguments.</td>
26         </tr>
27         <tr>
28               <td class="content">
29                  <b>(gdb)</b> run
30                  <br>
31                  <b>(gdb)</b> r
32               </td>
33               <td class="content">
34                  <b>(lldb)</b> process launch
35                  <br>
36                  <b>(lldb)</b> run
37                  <br>
38                  <b>(lldb)</b> r
39               </td>
40         </tr>
41
42         <tr>
43               <td class="header" colspan="2">Launch a process with arguments <code>&lt;args&gt;</code>.</td>
44         </tr>
45         <tr>
46               <td class="content">
47                  <b>(gdb)</b> run &lt;args&gt;
48                  <br>
49                  <b>(gdb)</b> r &lt;args&gt;
50               </td>
51               <td class="content">
52                  <b>(lldb)</b> process launch -- &lt;args&gt;
53                  <br>
54                  <b>(lldb)</b> run &lt;args&gt;
55                  <br>
56                  <b>(lldb)</b> r &lt;args&gt;
57               </td>
58         </tr>
59
60         <tr>
61               <td class="header" colspan="2">Launch process <b><code>a.out</code></b> with arguments <b><code>1 2 3</code></b> without having to supply the args every time.</td>
62         </tr>
63         <tr>
64               <td class="content">
65                  <b>%</b> gdb --args a.out 1 2 3
66                  <br>
67                  <b>(gdb)</b> run
68                  <br> ...
69                  <br>
70                  <b>(gdb)</b> run
71                  <br> ...
72                  <br>
73               </td>
74               <td class="content">
75                  <b>%</b> lldb -- a.out 1 2 3
76                  <br>
77                  <b>(lldb)</b> run
78                  <br> ...
79                  <br>
80                  <b>(lldb)</b> run
81                  <br> ...
82                  <br>
83               </td>
84         </tr>
85
86         <tr>
87               <td class="header" colspan="2">Or:</td>
88         </tr>
89         <tr>
90               <td class="content">
91                  <b>(gdb)</b> set args 1 2 3
92                  <br>
93                  <b>(gdb)</b> run
94                  <br> ...
95                  <br>
96                  <b>(gdb)</b> run
97                  <br> ...
98                  <br>
99               </td>
100               <td class="content">
101                  <b>(lldb)</b> settings set target.run-args 1 2 3
102                  <br>
103                  <b>(lldb)</b> run
104                  <br> ...
105                  <br>
106                  <b>(lldb)</b> run
107                  <br> ...
108                  <br>
109               </td>
110         </tr>
111
112         <tr>
113               <td class="header" colspan="2">Launch a process with arguments in new terminal window (macOS only).</td>
114         </tr>
115         <tr>
116               <td class="content">
117               </td>
118               <td class="content">
119                  <b>(lldb)</b> process launch --tty -- &lt;args&gt;
120                  <br>
121                  <b>(lldb)</b> pro la -t -- &lt;args&gt;
122                  <br>
123               </td>
124         </tr>
125
126         <tr>
127               <td class="header" colspan="2">Launch a process with arguments <code>&lt;args&gt;</code> in existing terminal <code>/dev/ttys006</code> (macOS only).</td>
128         </tr>
129         <tr>
130               <td class="content">
131               </td>
132               <td class="content">
133                  <b>(lldb)</b> process launch --tty=/dev/ttys006 -- &lt;args&gt;
134                  <br>
135                  <b>(lldb)</b> pro la -t/dev/ttys006 -- &lt;args&gt;
136                  <br>
137               </td>
138         </tr>
139
140         <tr>
141               <td class="header" colspan="2">Set environment variables for process before launching.</td>
142         </tr>
143         <tr>
144               <td class="content">
145                  <b>(gdb)</b> set env DEBUG 1
146                  <br>
147               </td>
148               <td class="content">
149                  <b>(lldb)</b> settings set target.env-vars DEBUG=1
150                  <br>
151                  <b>(lldb)</b> set se target.env-vars DEBUG=1
152                  <br>
153                  <b>(lldb)</b> env DEBUG=1
154                  <br>
155               </td>
156         </tr>
157
158         <tr>
159               <td class="header" colspan="2">Unset environment variables for process before launching.</td>
160         </tr>
161         <tr>
162               <td class="content">
163                  <b>(gdb)</b> unset env DEBUG
164                  <br>
165               </td>
166               <td class="content">
167                  <b>(lldb)</b> settings remove target.env-vars DEBUG
168                  <br>
169                  <b>(lldb)</b> set rem target.env-vars DEBUG
170                  <br>
171               </td>
172         </tr>
173
174         <tr>
175               <td class="header" colspan="2">Show the arguments that will be or were passed to the program when run.</td>
176         </tr>
177         <tr>
178               <td class="content">
179                  <b>(gdb)</b> show args
180                  <br> Argument list to give program being debugged when it is started is "1 2 3".
181                  <br>
182               </td>
183               <td class="content">
184                  <b>(lldb)</b> settings show target.run-args
185                  <br> target.run-args (array of strings) =
186                  <br> [0]: "1"
187                  <br> [1]: "2"
188                  <br> [2]: "3"
189                  <br>
190               </td>
191         </tr>
192
193         <tr>
194               <td class="header" colspan="2">Set environment variables for process and launch process in one command.</td>
195         </tr>
196         <tr>
197               <td class="content">
198               </td>
199               <td class="content">
200                  <b>(lldb)</b> process launch -E DEBUG=1
201                  <br>
202               </td>
203         </tr>
204
205         <tr>
206               <td class="header" colspan="2">Attach to the process with process ID 123.</td>
207         </tr>
208         <tr>
209               <td class="content">
210                  <b>(gdb)</b> attach 123
211               </td>
212               <td class="content">
213                  <b>(lldb)</b> process attach --pid 123
214                  <br>
215                  <b>(lldb)</b> attach -p 123
216               </td>
217         </tr>
218
219         <tr>
220               <td class="header" colspan="2">Attach to the process named "a.out".</td>
221         </tr>
222         <tr>
223               <td class="content">
224                  <b>(gdb)</b> attach a.out
225               </td>
226               <td class="content">
227                  <b>(lldb)</b> process attach --name a.out
228                  <br>
229                  <b>(lldb)</b> pro at -n a.out
230               </td>
231         </tr>
232
233         <tr>
234               <td class="header" colspan="2">Wait for a process named "a.out" to launch and attach.</td>
235         </tr>
236         <tr>
237               <td class="content">
238                  <b>(gdb)</b> attach -waitfor a.out
239               </td>
240               <td class="content">
241                  <b>(lldb)</b> process attach --name a.out --waitfor
242                  <br>
243                  <b>(lldb)</b> pro at -n a.out -w
244               </td>
245         </tr>
246
247         <tr>
248               <td class="header" colspan="2">Attach to a remote gdb protocol server running on system "eorgadd", port 8000.</td>
249         </tr>
250         <tr>
251               <td class="content">
252                  <b>(gdb)</b> target remote eorgadd:8000
253               </td>
254               <td class="content">
255                  <b>(lldb)</b> gdb-remote eorgadd:8000
256               </td>
257         </tr>
258
259         <tr>
260               <td class="header" colspan="2">Attach to a remote gdb protocol server running on the local system, port 8000.</td>
261         </tr>
262         <tr>
263               <td class="content">
264                  <b>(gdb)</b> target remote localhost:8000
265               </td>
266               <td class="content">
267                  <b>(lldb)</b> gdb-remote 8000
268               </td>
269         </tr>
270
271         <tr>
272               <td class="header" colspan="2">Attach to a Darwin kernel in kdp mode on system "eorgadd".</td>
273         </tr>
274         <tr>
275               <td class="content">
276                  <b>(gdb)</b> kdp-reattach eorgadd
277               </td>
278               <td class="content">
279                  <b>(lldb)</b> kdp-remote eorgadd
280               </td>
281         </tr>
282
283         <tr>
284               <td class="header" colspan="2">Do a source level single step in the currently selected thread.</td>
285         </tr>
286         <tr>
287               <td class="content">
288                  <b>(gdb)</b> step
289                  <br>
290                  <b>(gdb)</b> s
291               </td>
292               <td class="content">
293                  <b>(lldb)</b> thread step-in
294                  <br>
295                  <b>(lldb)</b> step
296                  <br>
297                  <b>(lldb)</b> s
298               </td>
299         </tr>
300
301         <tr>
302               <td class="header" colspan="2">Do a source level single step over in the currently selected thread.</td>
303         </tr>
304         <tr>
305               <td class="content">
306                  <b>(gdb)</b> next
307                  <br>
308                  <b>(gdb)</b> n
309               </td>
310               <td class="content">
311                  <b>(lldb)</b> thread step-over
312                  <br>
313                  <b>(lldb)</b> next
314                  <br>
315                  <b>(lldb)</b> n
316                  <br>
317               </td>
318         </tr>
319
320         <tr>
321               <td class="header" colspan="2">Do an instruction level single step in the currently selected thread.</td>
322         </tr>
323         <tr>
324               <td class="content">
325                  <b>(gdb)</b> stepi
326                  <br>
327                  <b>(gdb)</b> si
328               </td>
329               <td class="content">
330                  <b>(lldb)</b> thread step-inst
331                  <br>
332                  <b>(lldb)</b> si
333                  <br>
334               </td>
335         </tr>
336
337         <tr>
338               <td class="header" colspan="2">Do an instruction level single step over in the currently selected thread.</td>
339         </tr>
340         <tr>
341               <td class="content">
342                  <b>(gdb)</b> nexti
343                  <br>
344                  <b>(gdb)</b> ni
345               </td>
346               <td class="content">
347                  <b>(lldb)</b> thread step-inst-over
348                  <br>
349                  <b>(lldb)</b> ni
350               </td>
351         </tr>
352
353         <tr>
354               <td class="header" colspan="2">Step out of the currently selected frame.</td>
355         </tr>
356         <tr>
357               <td class="content">
358                  <b>(gdb)</b> finish
359                  <br>
360               </td>
361               <td class="content">
362                  <b>(lldb)</b> thread step-out
363                  <br>
364                  <b>(lldb)</b> finish
365                  <br>
366               </td>
367         </tr>
368
369         <tr>
370               <td class="header" colspan="2">Return immediately from the currently selected frame, with an optional return value.</td>
371         </tr>
372         <tr>
373               <td class="content">
374                  <b>(gdb)</b> return &lt;RETURN EXPRESSION&gt;
375                  <br>
376               </td>
377               <td class="content">
378                  <b>(lldb)</b> thread return &lt;RETURN EXPRESSION&gt;
379                  <br>
380               </td>
381         </tr>
382
383         <tr>
384               <td class="header" colspan="2">Backtrace and disassemble every time you stop.</td>
385         </tr>
386         <tr>
387               <td class="content">
388               </td>
389               <td class="content">
390                  <b>(lldb)</b> target stop-hook add
391                  <br> Enter your stop hook command(s). Type 'DONE' to end.
392                  <br> &gt; bt
393                  <br> &gt; disassemble --pc
394                  <br> &gt; DONE
395                  <br> Stop hook #1 added.
396                  <br>
397               </td>
398         </tr>
399         <tr>
400               <td class="header" colspan="2">Run until we hit line <b>12</b> or control leaves the current function.</td>
401         </tr>
402         <tr>
403               <td class="content">
404                  <b>(gdb)</b> until 12
405               </td>
406               <td class="content">
407                  <b>(lldb)</b> thread until 12
408               </td>
409         </tr>
410
411         <tr>
412               <td class="header" colspan="2">Show the current frame and source line.</td>
413         </tr>
414         <tr>
415               <td class="content">
416                  <b>(gdb)</b> frame
417               </td>
418               <td class="content">
419                  <b>(lldb)</b> frame select
420                  <br>
421                  <b>(lldb)</b> f
422                  <br>
423                  <b>(lldb)</b> process status
424               </td>
425         </tr>
426
427      </tbody>
428   </table>
429
430
431Breakpoint Commands
432-------------------
433
434.. raw:: html
435
436   <table class="mapping" cellspacing="0">
437      <tbody>
438         <tr>
439               <td class="hed" width="50%">GDB</td>
440               <td class="hed" width="50%">LLDB</td>
441         </tr>
442
443         <tr>
444               <td class="header" colspan="2">Set a breakpoint at all functions named <b><code>main</code></b>.</td>
445         </tr>
446         <tr>
447               <td class="content">
448                  <b>(gdb)</b> break main
449               </td>
450               <td class="content">
451                  <b>(lldb)</b> breakpoint set --name main
452                  <br>
453                  <b>(lldb)</b> br s -n main
454                  <br>
455                  <b>(lldb)</b> b main
456               </td>
457         </tr>
458
459         <tr>
460               <td class="header" colspan="2">Set a breakpoint in file <b><code>test.c</code></b> at line <b>12</b>.</td>
461         </tr>
462         <tr>
463               <td class="content">
464                  <b>(gdb)</b> break test.c:12
465               </td>
466               <td class="content">
467                  <b>(lldb)</b> breakpoint set --file test.c --line 12
468                  <br>
469                  <b>(lldb)</b> br s -f test.c -l 12
470                  <br>
471                  <b>(lldb)</b> b test.c:12
472               </td>
473         </tr>
474
475         <tr>
476               <td class="header" colspan="2">Set a breakpoint at all C++ methods whose basename is <b><code>main</code></b>.</td>
477         </tr>
478         <tr>
479               <td class="content">
480                  <b>(gdb)</b> break main
481                  <br>
482                  <i>(Hope that there are no C functions named <b>main</b>)</i>.
483               </td>
484               <td class="content">
485                  <b>(lldb)</b> breakpoint set --method main
486                  <br>
487                  <b>(lldb)</b> br s -M main
488                  <br>
489               </td>
490         </tr>
491
492         <tr>
493               <td class="header" colspan="2">Set a breakpoint at an Objective-C function <b><code>-[NSString stringWithFormat:]</code></b>.</td>
494         </tr>
495         <tr>
496               <td class="content">
497                  <b>(gdb)</b> break -[NSString stringWithFormat:]
498                  <br>
499               </td>
500               <td class="content">
501                  <b>(lldb)</b> breakpoint set --name "-[NSString stringWithFormat:]"
502                  <br>
503                  <b>(lldb)</b> b -[NSString stringWithFormat:]
504                  <br>
505               </td>
506         </tr>
507
508         <tr>
509               <td class="header" colspan="2">Set a breakpoint at all Objective-C methods whose selector is <b><code>count</code></b>.</td>
510         </tr>
511         <tr>
512               <td class="content">
513                  <b>(gdb)</b> break count
514                  <br>
515                  <i>(Hope that there are no C or C++ functions named <b>count</b>)</i>.
516               </td>
517               <td class="content">
518                  <b>(lldb)</b> breakpoint set --selector count
519                  <br>
520                  <b>(lldb)</b> br s -S count
521                  <br>
522               </td>
523         </tr>
524         <tr>
525               <td class="header" colspan="2">Set a breakpoint by regular expression on function name.</td>
526         </tr>
527
528         <tr>
529               <td class="content">
530                  <b>(gdb)</b> rbreak regular-expression
531                  <br>
532               </td>
533               <td class="content">
534                  <b>(lldb)</b> breakpoint set --func-regex regular-expression
535                  <br>
536                  <b>(lldb)</b> br s -r regular-expression
537                  <br>
538               </td>
539         </tr>
540
541         <tr>
542               <td class="header" colspan="2">Ensure that breakpoints by file and line work for <code>#include</code> .c/.cpp/.m files.</td>
543         </tr>
544
545         <tr>
546               <td class="content">
547                  <b>(gdb)</b> b foo.c:12
548                  <br>
549               </td>
550               <td class="content">
551                  <b>(lldb)</b> settings set target.inline-breakpoint-strategy always
552                  <br>
553                  <b>(lldb)</b> br s -f foo.c -l 12
554                  <br>
555               </td>
556         </tr>
557
558         <tr>
559               <td class="header" colspan="2">Set a breakpoint by regular expression on source file contents.</td>
560         </tr>
561
562         <tr>
563               <td class="content">
564                  <b>(gdb)</b> shell grep -e -n pattern source-file
565                  <br>
566                  <b>(gdb)</b> break source-file:CopyLineNumbers
567                  <br>
568               </td>
569               <td class="content">
570                  <b>(lldb)</b> breakpoint set --source-pattern regular-expression --file SourceFile
571                  <br>
572                  <b>(lldb)</b> br s -p regular-expression -f file
573                  <br>
574               </td>
575         </tr>
576
577         <tr>
578               <td class="header" colspan="2">Set a conditional breakpoint.</td>
579         </tr>
580
581         <tr>
582               <td class="content">
583                  <b>(gdb)</b> break foo if strcmp(y,"hello") == 0
584                  <br>
585               </td>
586               <td class="content">
587                  <b>(lldb)</b> breakpoint set --name foo --condition '(int)strcmp(y,"hello") == 0'
588                  <br>
589                  <b>(lldb)</b> br s -n foo -c '(int)strcmp(y,"hello") == 0'
590                  <br>
591               </td>
592         </tr>
593
594         <tr>
595               <td class="header" colspan="2">List all breakpoints.</td>
596         </tr>
597         <tr>
598               <td class="content">
599                  <b>(gdb)</b> info break
600                  <br>
601               </td>
602               <td class="content">
603                  <b>(lldb)</b> breakpoint list
604                  <br>
605                  <b>(lldb)</b> br l
606                  <br>
607               </td>
608         </tr>
609
610         <tr>
611               <td class="header" colspan="2">Delete a breakpoint.</td>
612         </tr>
613         <tr>
614               <td class="content">
615                  <b>(gdb)</b> delete 1
616                  <br>
617               </td>
618               <td class="content">
619                  <b>(lldb)</b> breakpoint delete 1
620                  <br>
621                  <b>(lldb)</b> br del 1
622                  <br>
623               </td>
624         </tr>
625
626         <tr>
627               <td class="header" colspan="2">Disable a breakpoint.</td>
628         </tr>
629         <tr>
630               <td class="content">
631                  <b>(gdb)</b> disable 1
632                  <br>
633               </td>
634               <td class="content">
635                  <b>(lldb)</b> breakpoint disable 1
636                  <br>
637                  <b>(lldb)</b> br dis 1
638                  <br>
639               </td>
640         </tr>
641
642         <tr>
643               <td class="header" colspan="2">Enable a breakpoint.</td>
644         </tr>
645         <tr>
646               <td class="content">
647                  <b>(gdb)</b> enable 1
648                  <br>
649               </td>
650               <td class="content">
651                  <b>(lldb)</b> breakpoint enable 1
652                  <br>
653                  <b>(lldb)</b> br en 1
654                  <br>
655               </td>
656         </tr>
657
658      </tbody>
659   </table>
660
661
662Watchpoint Commands
663-------------------
664
665.. raw:: html
666
667   <table class="mapping" cellspacing="0">
668      <tbody>
669         <tr>
670               <td class="hed" width="50%">GDB</td>
671               <td class="hed" width="50%">LLDB</td>
672         </tr>
673
674         <tr>
675               <td class="header" colspan="2">Set a watchpoint on a variable when it is written to.</td>
676         </tr>
677         <tr>
678               <td class="content">
679                  <b>(gdb)</b> watch global_var
680               </td>
681               <td class="content">
682                  <b>(lldb)</b> watchpoint set variable global_var
683                  <br>
684                  <b>(lldb)</b> wa s v global_var
685                  <br>
686               </td>
687         </tr>
688
689         <tr>
690               <td class="header" colspan="2">Set a watchpoint on a memory location when it is written into. The size of the region to watch for defaults to the pointer size if no '-x byte_size' is specified. This command takes raw input, evaluated as an expression returning an unsigned integer pointing to the start of the region, after the '--' option terminator.</td>
691         </tr>
692         <tr>
693               <td class="content">
694                  <b>(gdb)</b> watch -location g_char_ptr
695               </td>
696               <td class="content">
697                  <b>(lldb)</b> watchpoint set expression -- my_ptr
698                  <br>
699                  <b>(lldb)</b> wa s e -- my_ptr
700                  <br>
701               </td>
702         </tr>
703
704         <tr>
705               <td class="header" colspan="2">Set a condition on a watchpoint.</td>
706         </tr>
707         <tr>
708               <td class="content">
709               </td>
710               <td class="content">
711                  <b>(lldb)</b> watch set var global
712                  <br>
713                  <b>(lldb)</b> watchpoint modify -c '(global==5)'
714                  <br>
715                  <b>(lldb)</b> c
716                  <br> ...
717                  <br>
718                  <b>(lldb)</b> bt
719                  <br> * thread #1: tid = 0x1c03, 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16, stop reason = watchpoint 1
720                  <br> frame #0: 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16
721                  <br> frame #1: 0x0000000100000eac a.out`main + 108 at main.cpp:25
722                  <br> frame #2: 0x00007fff8ac9c7e1 libdyld.dylib`start + 1
723                  <br>
724                  <b>(lldb)</b> frame var global
725                  <br> (int32_t) global = 5
726                  <br>
727               </td>
728         </tr>
729
730         <tr>
731               <td class="header" colspan="2">List all watchpoints.</td>
732         </tr>
733         <tr>
734               <td class="content">
735                  <b>(gdb)</b> info break
736                  <br>
737               </td>
738               <td class="content">
739                  <b>(lldb)</b> watchpoint list
740                  <br>
741                  <b>(lldb)</b> watch l
742                  <br>
743               </td>
744         </tr>
745
746         <tr>
747               <td class="header" colspan="2">Delete a watchpoint.</td>
748         </tr>
749         <tr>
750               <td class="content">
751                  <b>(gdb)</b> delete 1
752                  <br>
753               </td>
754               <td class="content">
755                  <b>(lldb)</b> watchpoint delete 1
756                  <br>
757                  <b>(lldb)</b> watch del 1
758                  <br>
759               </td>
760         </tr>
761
762      </tbody>
763   </table>
764
765
766Examining Variables
767-------------------
768
769.. raw:: html
770
771   <table class="mapping" cellspacing="0">
772      <tbody>
773         <tr>
774               <td class="hed" width="50%">GDB</td>
775               <td class="hed" width="50%">LLDB</td>
776         </tr>
777
778         <tr>
779               <td class="header" colspan="2">Show the arguments and local variables for the current frame.</td>
780         </tr>
781         <tr>
782               <td class="content">
783                  <b>(gdb)</b> info args
784                  <br> and
785                  <br>
786                  <b>(gdb)</b> info locals
787                  <br>
788               </td>
789               <td class="content">
790                  <b>(lldb)</b> frame variable
791                  <br>
792                  <b>(lldb)</b> fr v
793                  <br>
794               </td>
795         </tr>
796
797         <tr>
798               <td class="header" colspan="2">Show the local variables for the current frame.</td>
799         </tr>
800         <tr>
801               <td class="content">
802                  <b>(gdb)</b> info locals
803                  <br>
804               </td>
805               <td class="content">
806                  <b>(lldb)</b> frame variable --no-args
807                  <br>
808                  <b>(lldb)</b> fr v -a
809                  <br>
810               </td>
811         </tr>
812
813         <tr>
814               <td class="header" colspan="2">Show the contents of local variable "bar".</td>
815         </tr>
816         <tr>
817               <td class="content">
818                  <b>(gdb)</b> p bar
819                  <br>
820               </td>
821               <td class="content">
822                  <b>(lldb)</b> frame variable bar
823                  <br>
824                  <b>(lldb)</b> fr v bar
825                  <br>
826                  <b>(lldb)</b> p bar
827                  <br>
828               </td>
829         </tr>
830
831         <tr>
832               <td class="header" colspan="2">Show the contents of local variable "bar" formatted as hex.</td>
833         </tr>
834         <tr>
835               <td class="content">
836                  <b>(gdb)</b> p/x bar
837                  <br>
838               </td>
839               <td class="content">
840                  <b>(lldb)</b> frame variable --format x bar
841                  <br>
842                  <b>(lldb)</b> fr v -f x bar
843                  <br>
844               </td>
845         </tr>
846
847         <tr>
848               <td class="header" colspan="2">Show the contents of global variable "baz".</td>
849         </tr>
850         <tr>
851               <td class="content">
852                  <b>(gdb)</b> p baz
853                  <br>
854               </td>
855               <td class="content">
856                  <b>(lldb)</b> target variable baz
857                  <br>
858                  <b>(lldb)</b> ta v baz
859                  <br>
860               </td>
861         </tr>
862
863         <tr>
864               <td class="header" colspan="2">Show the global/static variables defined in the current source file.</td>
865         </tr>
866         <tr>
867               <td class="content">
868                  n/a
869                  <br>
870               </td>
871               <td class="content">
872                  <b>(lldb)</b> target variable
873                  <br>
874                  <b>(lldb)</b> ta v
875                  <br>
876               </td>
877         </tr>
878
879         <tr>
880               <td class="header" colspan="2">Display the variables "argc" and "argv" every time you stop.</td>
881         </tr>
882         <tr>
883               <td class="content">
884                  <b>(gdb)</b> display argc
885                  <br>
886                  <b>(gdb)</b> display argv
887                  <br>
888               </td>
889               <td class="content">
890                  <b>(lldb)</b> target stop-hook add --one-liner "frame variable argc argv"
891                  <br>
892                  <b>(lldb)</b> ta st a -o "fr v argc argv"
893                  <br>
894                  <b>(lldb)</b> display argc
895                  <br>
896                  <b>(lldb)</b> display argv
897                  <br>
898               </td>
899         </tr>
900
901         <tr>
902               <td class="header" colspan="2">Display the variables "argc" and "argv" only when you stop in the function named <b><code>main</code></b>.</td>
903         </tr>
904         <tr>
905               <td class="content">
906               </td>
907               <td class="content">
908                  <b>(lldb)</b> target stop-hook add --name main --one-liner "frame variable argc argv"
909                  <br>
910                  <b>(lldb)</b> ta st a -n main -o "fr v argc argv"
911                  <br>
912               </td>
913         </tr>
914
915         <tr>
916               <td class="header" colspan="2">Display the variable "*this" only when you stop in c class named <b><code>MyClass</code></b>.</td>
917         </tr>
918         <tr>
919               <td class="content">
920               </td>
921               <td class="content">
922                  <b>(lldb)</b> target stop-hook add --classname MyClass --one-liner "frame variable *this"
923                  <br>
924                  <b>(lldb)</b> ta st a -c MyClass -o "fr v *this"
925                  <br>
926               </td>
927         </tr>
928
929         <tr>
930               <td class="header" colspan="2">Print an array of integers in memory, assuming we have a pointer like "int *ptr".</td>
931         </tr>
932         <tr>
933               <td class="content">
934                  <b>(gdb)</b> p *ptr@10
935                  <br>
936               </td>
937               <td class="content">
938                  <b>(lldb)</b> parray 10 ptr
939                  <br>
940               </td>
941         </tr>
942
943      </tbody>
944   </table>
945
946Evaluating Expressions
947----------------------
948
949.. raw:: html
950
951   <table class="mapping" cellspacing="0">
952      <tbody>
953         <tr>
954               <td class="hed" width="50%">GDB</td>
955               <td class="hed" width="50%">LLDB</td>
956         </tr>
957
958         <tr>
959               <td class="header" colspan="2">Evaluating a generalized expression in the current frame.</td>
960         </tr>
961         <tr>
962               <td class="content">
963                  <b>(gdb)</b> print (int) printf ("Print nine: %d.", 4 + 5)
964                  <br> or if you don't want to see void returns:
965                  <br>
966                  <b>(gdb)</b> call (int) printf ("Print nine: %d.", 4 + 5)
967                  <br>
968               </td>
969               <td class="content">
970                  <b>(lldb)</b> expr (int) printf ("Print nine: %d.", 4 + 5)
971                  <br> or using the print alias:
972                  <br>
973                  <b>(lldb)</b> print (int) printf ("Print nine: %d.", 4 + 5)
974                  <br>
975               </td>
976         </tr>
977
978         <tr>
979               <td class="header" colspan="2">Creating and assigning a value to a convenience variable.</td>
980         </tr>
981         <tr>
982               <td class="content">
983                  <b>(gdb)</b> set $foo = 5
984                  <br>
985                  <b>(gdb)</b> set variable $foo = 5
986                  <br> or using the print command
987                  <br>
988                  <b>(gdb)</b> print $foo = 5
989                  <br> or using the call command
990                  <br>
991                  <b>(gdb)</b> call $foo = 5
992                  <br> and if you want to specify the type of the variable:
993                  <b>(gdb)</b> set $foo = (unsigned int) 5
994                  <br>
995
996               </td>
997               <td class="content">
998                  In lldb you evaluate a variable declaration expression as you would write it in C:
999                  <br>
1000                  <b>(lldb)</b> expr unsigned int $foo = 5
1001                  <br>
1002               </td>
1003         </tr>
1004
1005         <tr>
1006               <td class="header" colspan="2">Printing the ObjC "description" of an object.</td>
1007         </tr>
1008         <tr>
1009               <td class="content">
1010                  <b>(gdb)</b> po [SomeClass returnAnObject]
1011                  <br>
1012               </td>
1013               <td class="content">
1014                  <b>(lldb)</b> expr -o -- [SomeClass returnAnObject]
1015                  <br> or using the po alias:
1016                  <br>
1017                  <b>(lldb)</b> po [SomeClass returnAnObject]
1018                  <br>
1019               </td>
1020         </tr>
1021
1022         <tr>
1023               <td class="header" colspan="2">Print the dynamic type of the result of an expression.</td>
1024         </tr>
1025         <tr>
1026               <td class="content">
1027                  <b>(gdb)</b> set print object 1
1028                  <br>
1029                  <b>(gdb)</b> p someCPPObjectPtrOrReference
1030                  <br> only works for C++ objects.
1031                  <br>
1032               </td>
1033               <td class="content">
1034                  <b>(lldb)</b> expr -d 1 -- [SomeClass returnAnObject]
1035                  <br>
1036                  <b>(lldb)</b> expr -d 1 -- someCPPObjectPtrOrReference
1037                  <br> or set dynamic type printing to be the default:
1038                  <b>(lldb)</b> settings set target.prefer-dynamic run-target
1039                  <br>
1040               </td>
1041         </tr>
1042
1043         <tr>
1044               <td class="header" colspan="2">Call a function so you can stop at a breakpoint in it.</td>
1045         </tr>
1046         <tr>
1047               <td class="content">
1048                  <b>(gdb)</b> set unwindonsignal 0
1049                  <br>
1050                  <b>(gdb)</b> p function_with_a_breakpoint()
1051                  <br>
1052               </td>
1053               <td class="content">
1054                  <b>(lldb)</b> expr -i 0 -- function_with_a_breakpoint()
1055                  <br>
1056               </td>
1057         </tr>
1058
1059         <tr>
1060               <td class="header" colspan="2">Call a function that crashes, then stop when it does.</td>
1061         </tr>
1062         <tr>
1063               <td class="content">
1064                  <b>(gdb)</b> set unwindonsignal 0
1065                  <br>
1066                  <b>(gdb)</b> p function_which_crashes()
1067                  <br>
1068               </td>
1069               <td class="content">
1070                  <b>(lldb)</b> expr -u 0 -- function_which_crashes()
1071                  <br>
1072               </td>
1073         </tr>
1074
1075      </tbody>
1076   </table>
1077
1078Examining Thread State
1079----------------------
1080
1081.. raw:: html
1082
1083   <table class="mapping" cellspacing="0">
1084      <tbody>
1085         <tr>
1086               <td class="hed" width="50%">GDB</td>
1087               <td class="hed" width="50%">LLDB</td>
1088         </tr>
1089
1090         <tr>
1091               <td class="header" colspan="2">List the threads in your program.</td>
1092         </tr>
1093         <tr>
1094               <td class="content">
1095                  <b>(gdb)</b> info threads
1096                  <br>
1097               </td>
1098               <td class="content">
1099                  <b>(lldb)</b> thread list
1100                  <br>
1101               </td>
1102         </tr>
1103
1104         <tr>
1105               <td class="header" colspan="2">Select thread 1 as the default thread for subsequent commands.</td>
1106         </tr>
1107         <tr>
1108               <td class="content">
1109                  <b>(gdb)</b> thread 1
1110                  <br>
1111               </td>
1112               <td class="content">
1113                  <b>(lldb)</b> thread select 1
1114                  <br>
1115                  <b>(lldb)</b> t 1
1116                  <br>
1117               </td>
1118         </tr>
1119
1120         <tr>
1121               <td class="header" colspan="2">Show the stack backtrace for the current thread.</td>
1122         </tr>
1123         <tr>
1124               <td class="content">
1125                  <b>(gdb)</b> bt
1126                  <br>
1127               </td>
1128               <td class="content">
1129                  <b>(lldb)</b> thread backtrace
1130                  <br>
1131                  <b>(lldb)</b> bt
1132                  <br>
1133               </td>
1134         </tr>
1135
1136         <tr>
1137               <td class="header" colspan="2">Show the stack backtraces for all threads.</td>
1138         </tr>
1139         <tr>
1140               <td class="content">
1141                  <b>(gdb)</b> thread apply all bt
1142               </td>
1143               <td class="content">
1144                  <b>(lldb)</b> thread backtrace all
1145                  <br>
1146                  <b>(lldb)</b> bt all
1147               </td>
1148         </tr>
1149
1150         <tr>
1151               <td class="header" colspan="2">Backtrace the first five frames of the current thread.</td>
1152         </tr>
1153         <tr>
1154               <td class="content">
1155                  <b>(gdb)</b> bt 5
1156               </td>
1157               <td class="content">
1158                  <b>(lldb)</b> thread backtrace -c 5
1159                  <br>
1160                  <b>(lldb)</b> bt 5 (<i>lldb-169 and later</i>)
1161                  <br>
1162                  <b>(lldb)</b> bt -c 5 (<i>lldb-168 and earlier</i>)
1163               </td>
1164         </tr>
1165
1166         <tr>
1167               <td class="header" colspan="2">Select a different stack frame by index for the current thread.</td>
1168         </tr>
1169         <tr>
1170               <td class="content">
1171                  <b>(gdb)</b> frame 12
1172               </td>
1173               <td class="content">
1174                  <b>(lldb)</b> frame select 12
1175                  <br>
1176                  <b>(lldb)</b> fr s 12
1177                  <br>
1178                  <b>(lldb)</b> f 12
1179                  <br>
1180               </td>
1181         </tr>
1182
1183         <tr>
1184               <td class="header" colspan="2">List information about the currently selected frame in the current thread.</td>
1185         </tr>
1186         <tr>
1187               <td class="content">
1188               </td>
1189               <td class="content">
1190                  <b>(lldb)</b> frame info
1191                  <br>
1192               </td>
1193         </tr>
1194
1195         <tr>
1196               <td class="header" colspan="2">Select the stack frame that called the current stack frame.</td>
1197         </tr>
1198         <tr>
1199               <td class="content">
1200                  <b>(gdb)</b> up
1201               </td>
1202               <td class="content">
1203                  <b>(lldb)</b> up
1204                  <br>
1205                  <b>(lldb)</b> frame select --relative=1
1206                  <br>
1207               </td>
1208         </tr>
1209
1210         <tr>
1211               <td class="header" colspan="2">Select the stack frame that is called by the current stack frame.</td>
1212         </tr>
1213         <tr>
1214               <td class="content">
1215                  <b>(gdb)</b> down
1216               </td>
1217               <td class="content">
1218                  <b>(lldb)</b> down
1219                  <br>
1220                  <b>(lldb)</b> frame select --relative=-1
1221                  <br>
1222                  <b>(lldb)</b> fr s -r-1
1223                  <br>
1224               </td>
1225         </tr>
1226
1227         <tr>
1228               <td class="header" colspan="2">Select a different stack frame using a relative offset.</td>
1229         </tr>
1230         <tr>
1231               <td class="content">
1232                  <b>(gdb)</b> up 2
1233                  <br>
1234                  <b>(gdb)</b> down 3
1235                  <br>
1236               </td>
1237               <td class="content">
1238                  <b>(lldb)</b> frame select --relative 2
1239                  <br>
1240                  <b>(lldb)</b> fr s -r2
1241                  <br>
1242                  <br>
1243                  <b>(lldb)</b> frame select --relative -3
1244                  <br>
1245                  <b>(lldb)</b> fr s -r-3
1246                  <br>
1247               </td>
1248         </tr>
1249
1250         <tr>
1251               <td class="header" colspan="2">Show the general purpose registers for the current thread.</td>
1252         </tr>
1253         <tr>
1254               <td class="content">
1255                  <b>(gdb)</b> info registers
1256                  <br>
1257               </td>
1258               <td class="content">
1259                  <b>(lldb)</b> register read
1260                  <br>
1261               </td>
1262         </tr>
1263
1264         <tr>
1265               <td class="header" colspan="2">Write a new decimal value '123' to the current thread register 'rax'.</td>
1266         </tr>
1267         <tr>
1268               <td class="content">
1269                  <b>(gdb)</b> p $rax = 123
1270                  <br>
1271               </td>
1272               <td class="content">
1273                  <b>(lldb)</b> register write rax 123
1274                  <br>
1275               </td>
1276         </tr>
1277
1278         <tr>
1279               <td class="header" colspan="2">Skip 8 bytes ahead of the current program counter (instruction pointer). Note that we use backticks to evaluate an expression and insert the scalar result in LLDB.</td>
1280         </tr>
1281         <tr>
1282               <td class="content">
1283                  <b>(gdb)</b> jump *$pc+8
1284                  <br>
1285               </td>
1286               <td class="content">
1287                  <b>(lldb)</b> register write pc `$pc+8`
1288                  <br>
1289               </td>
1290         </tr>
1291
1292         <tr>
1293               <td class="header" colspan="2">Show the general purpose registers for the current thread formatted as <b>signed decimal</b>. LLDB tries to use the same format characters as <b><code>printf(3)</code></b> when possible. Type "help format" to see the full list of format specifiers.</td>
1294         </tr>
1295         <tr>
1296               <td class="content">
1297               </td>
1298               <td class="content">
1299                  <b>(lldb)</b> register read --format i
1300                  <br>
1301                  <b>(lldb)</b> re r -f i
1302                  <br>
1303                  <br>
1304                  <i>LLDB now supports the GDB shorthand format syntax but there can't be space after the command:</i>
1305                  <br>
1306                  <b>(lldb)</b> register read/d
1307                  <br>
1308               </td>
1309         </tr>
1310
1311         <tr>
1312               <td class="header" colspan="2">Show all registers in all register sets for the current thread.</td>
1313         </tr>
1314         <tr>
1315               <td class="content">
1316                  <b>(gdb)</b> info all-registers
1317                  <br>
1318               </td>
1319               <td class="content">
1320                  <b>(lldb)</b> register read --all
1321                  <br>
1322                  <b>(lldb)</b> re r -a
1323                  <br>
1324               </td>
1325         </tr>
1326
1327         <tr>
1328               <td class="header" colspan="2">Show the values for the registers named "rax", "rsp" and "rbp" in the current thread.</td>
1329         </tr>
1330         <tr>
1331               <td class="content">
1332                  <b>(gdb)</b> info all-registers rax rsp rbp
1333                  <br>
1334               </td>
1335               <td class="content">
1336                  <b>(lldb)</b> register read rax rsp rbp
1337                  <br>
1338               </td>
1339         </tr>
1340
1341         <tr>
1342               <td class="header" colspan="2">Show the values for the register named "rax" in the current thread formatted as <b>binary</b>.</td>
1343         </tr>
1344         <tr>
1345               <td class="content">
1346                  <b>(gdb)</b> p/t $rax
1347                  <br>
1348               </td>
1349               <td class="content">
1350                  <b>(lldb)</b> register read --format binary rax
1351                  <br>
1352                  <b>(lldb)</b> re r -f b rax
1353                  <br>
1354                  <br>
1355                  <i>LLDB now supports the GDB shorthand format syntax but there can't be space after the command:</i>
1356                  <br>
1357                  <b>(lldb)</b> register read/t rax
1358                  <br>
1359                  <b>(lldb)</b> p/t $rax
1360                  <br>
1361               </td>
1362         </tr>
1363
1364         <tr>
1365               <td class="header" colspan="2">Read memory from address 0xbffff3c0 and show 4 hex <code>uint32_t</code> values.</td>
1366         </tr>
1367         <tr>
1368               <td class="content">
1369                  <b>(gdb)</b> x/4xw 0xbffff3c0
1370                  <br>
1371               </td>
1372               <td class="content">
1373                  <b>(lldb)</b> memory read --size 4 --format x --count 4 0xbffff3c0
1374                  <br>
1375                  <b>(lldb)</b> me r -s4 -fx -c4 0xbffff3c0
1376                  <br>
1377                  <b>(lldb)</b> x -s4 -fx -c4 0xbffff3c0
1378                  <br>
1379                  <br>
1380                  <i>LLDB now supports the GDB shorthand format syntax but there can't be space after the command:</i>
1381                  <br>
1382                  <b>(lldb)</b> memory read/4xw 0xbffff3c0
1383                  <br>
1384                  <b>(lldb)</b> x/4xw 0xbffff3c0
1385                  <br>
1386                  <b>(lldb)</b> memory read --gdb-format 4xw 0xbffff3c0
1387                  <br>
1388               </td>
1389         </tr>
1390
1391         <tr>
1392               <td class="header" colspan="2">Read memory starting at the expression "argv[0]".</td>
1393         </tr>
1394         <tr>
1395               <td class="content">
1396                  <b>(gdb)</b> x argv[0]
1397                  <br>
1398               </td>
1399               <td class="content">
1400                  <b>(lldb)</b> memory read `argv[0]`
1401                  <br>
1402                  <i><b>NOTE:</b> any command can inline a scalar expression result (as long as the target is stopped) using backticks around any expression:</i>
1403                  <br>
1404                  <b>(lldb)</b> memory read --size `sizeof(int)` `argv[0]`
1405                  <br>
1406               </td>
1407         </tr>
1408
1409         <tr>
1410               <td class="header" colspan="2">Read 512 bytes of memory from address 0xbffff3c0 and save the results to a local file as <b>text</b>.</td>
1411         </tr>
1412         <tr>
1413               <td class="content">
1414                  <b>(gdb)</b> set logging on
1415                  <br>
1416                  <b>(gdb)</b> set logging file /tmp/mem.txt
1417                  <br>
1418                  <b>(gdb)</b> x/512bx 0xbffff3c0
1419                  <br>
1420                  <b>(gdb)</b> set logging off
1421                  <br>
1422               </td>
1423               <td class="content">
1424                  <b>(lldb)</b> memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0
1425                  <br>
1426                  <b>(lldb)</b> me r -o/tmp/mem.txt -c512 0xbffff3c0
1427                  <br>
1428                  <b>(lldb)</b> x/512bx -o/tmp/mem.txt 0xbffff3c0
1429                  <br>
1430               </td>
1431         </tr>
1432
1433         <tr>
1434               <td class="header" colspan="2">Save binary memory data starting at 0x1000 and ending at 0x2000 to a file.</td>
1435         </tr>
1436         <tr>
1437               <td class="content">
1438                  <b>(gdb)</b> dump memory /tmp/mem.bin 0x1000 0x2000
1439               </td>
1440               <td class="content">
1441                  <b>(lldb)</b> memory read --outfile /tmp/mem.bin --binary 0x1000 0x2000
1442                  <br>
1443                  <b>(lldb)</b> me r -o /tmp/mem.bin -b 0x1000 0x2000
1444                  <br>
1445               </td>
1446         </tr>
1447         <tr>
1448               <td class="header" colspan="2">Get information about a specific heap allocation (available on macOS only).</td>
1449         </tr>
1450         <tr>
1451               <td class="content">
1452                  <b>(gdb)</b> info malloc 0x10010d680
1453               </td>
1454               <td class="content">
1455                  <b>(lldb)</b> command script import lldb.macosx.heap
1456                  <br>
1457                  <b>(lldb)</b> process launch --environment MallocStackLogging=1 -- [ARGS]
1458                  <br>
1459                  <b>(lldb)</b> malloc_info --stack-history 0x10010d680
1460                  <br>
1461               </td>
1462         </tr>
1463         <tr>
1464               <td class="header" colspan="2">Get information about a specific heap allocation and cast the result to any dynamic type that can be deduced (available on macOS only)</td>
1465         </tr>
1466         <tr>
1467               <td class="content">
1468               </td>
1469               <td class="content">
1470                  <b>(lldb)</b> command script import lldb.macosx.heap
1471                  <br>
1472                  <b>(lldb)</b> malloc_info --type 0x10010d680
1473                  <br>
1474               </td>
1475         </tr>
1476         <tr>
1477               <td class="header" colspan="2">Find all heap blocks that contain a pointer specified by an expression EXPR (available on macOS only).</td>
1478         </tr>
1479         <tr>
1480               <td class="content">
1481               </td>
1482               <td class="content">
1483                  <b>(lldb)</b> command script import lldb.macosx.heap
1484                  <br>
1485                  <b>(lldb)</b> ptr_refs EXPR
1486                  <br>
1487               </td>
1488         </tr>
1489         <tr>
1490               <td class="header" colspan="2">Find all heap blocks that contain a C string anywhere in the block (available on macOS only).</td>
1491         </tr>
1492         <tr>
1493               <td class="content">
1494               </td>
1495               <td class="content">
1496                  <b>(lldb)</b> command script import lldb.macosx.heap
1497                  <br>
1498                  <b>(lldb)</b> cstr_refs CSTRING
1499                  <br>
1500               </td>
1501         </tr>
1502         <tr>
1503               <td class="header" colspan="2">Disassemble the current function for the current frame.</td>
1504         </tr>
1505         <tr>
1506               <td class="content">
1507                  <b>(gdb)</b> disassemble
1508               </td>
1509               <td class="content">
1510                  <b>(lldb)</b> disassemble --frame
1511                  <br>
1512                  <b>(lldb)</b> di -f
1513               </td>
1514         </tr>
1515
1516         <tr>
1517               <td class="header" colspan="2">Disassemble any functions named <b><code>main</code></b>.</td>
1518         </tr>
1519         <tr>
1520               <td class="content">
1521                  <b>(gdb)</b> disassemble main
1522               </td>
1523               <td class="content">
1524                  <b>(lldb)</b> disassemble --name main
1525                  <br>
1526                  <b>(lldb)</b> di -n main
1527               </td>
1528         </tr>
1529
1530         <tr>
1531               <td class="header" colspan="2">Disassemble an address range.</td>
1532         </tr>
1533         <tr>
1534               <td class="content">
1535                  <b>(gdb)</b> disassemble 0x1eb8 0x1ec3
1536               </td>
1537               <td class="content">
1538                  <b>(lldb)</b> disassemble --start-address 0x1eb8 --end-address 0x1ec3
1539                  <br>
1540                  <b>(lldb)</b> di -s 0x1eb8 -e 0x1ec3
1541                  <br>
1542               </td>
1543         </tr>
1544
1545         <tr>
1546               <td class="header" colspan="2">Disassemble 20 instructions from a given address.</td>
1547         </tr>
1548         <tr>
1549               <td class="content">
1550                  <b>(gdb)</b> x/20i 0x1eb8
1551               </td>
1552               <td class="content">
1553                  <b>(lldb)</b> disassemble --start-address 0x1eb8 --count 20
1554                  <br>
1555                  <b>(lldb)</b> di -s 0x1eb8 -c 20
1556                  <br>
1557               </td>
1558         </tr>
1559
1560         <tr>
1561               <td class="header" colspan="2">Show mixed source and disassembly for the current function for the current frame.</td>
1562         </tr>
1563         <tr>
1564               <td class="content">
1565                  n/a
1566               </td>
1567               <td class="content">
1568                  <b>(lldb)</b> disassemble --frame --mixed
1569                  <br>
1570                  <b>(lldb)</b> di -f -m
1571               </td>
1572         </tr>
1573
1574         <tr>
1575               <td class="header" colspan="2">Disassemble the current function for the current frame and show the opcode bytes.</td>
1576         </tr>
1577         <tr>
1578               <td class="content">
1579                  n/a
1580               </td>
1581               <td class="content">
1582                  <b>(lldb)</b> disassemble --frame --bytes
1583                  <br>
1584                  <b>(lldb)</b> di -f -b
1585               </td>
1586         </tr>
1587
1588         <tr>
1589               <td class="header" colspan="2">Disassemble the current source line for the current frame.</td>
1590         </tr>
1591         <tr>
1592               <td class="content">
1593                  n/a
1594               </td>
1595               <td class="content">
1596                  <b>(lldb)</b> disassemble --line
1597                  <br>
1598                  <b>(lldb)</b> di -l
1599               </td>
1600         </tr>
1601
1602      </tbody>
1603   </table>
1604
1605Executable and Shared Library Query Commands
1606--------------------------------------------
1607
1608.. raw:: html
1609
1610   <table class="mapping" cellspacing="0">
1611      <tbody>
1612         <tr>
1613               <td class="hed" width="50%">GDB</td>
1614               <td class="hed" width="50%">LLDB</td>
1615         </tr>
1616
1617         <tr>
1618               <td class="header" colspan="2">List the main executable and all dependent shared libraries.</td>
1619         </tr>
1620         <tr>
1621               <td class="content">
1622                  <b>(gdb)</b> info shared
1623                  <br>
1624               </td>
1625               <td class="content">
1626                  <b>(lldb)</b> image list
1627                  <br>
1628               </td>
1629         </tr>
1630
1631         <tr>
1632               <td class="header" colspan="2">Look up information for a raw address in the executable or any shared libraries.</td>
1633         </tr>
1634         <tr>
1635               <td class="content">
1636                  <b>(gdb)</b> info symbol 0x1ec4
1637                  <br>
1638               </td>
1639               <td class="content">
1640                  <b>(lldb)</b> image lookup --address 0x1ec4
1641                  <br>
1642                  <b>(lldb)</b> im loo -a 0x1ec4
1643                  <br>
1644               </td>
1645         </tr>
1646
1647         <tr>
1648               <td class="header" colspan="2">Look up functions matching a regular expression in a binary.</td>
1649         </tr>
1650         <tr>
1651               <td class="content">
1652                  <b>(gdb)</b> info function &lt;FUNC_REGEX&gt;
1653                  <br>
1654               </td>
1655               <td class="content">
1656                  This one finds debug symbols:
1657                  <br>
1658                  <b>(lldb)</b> image lookup -r -n &lt;FUNC_REGEX&gt;
1659                  <br>
1660                  <br> This one finds non-debug symbols:
1661                  <br>
1662                  <b>(lldb)</b> image lookup -r -s &lt;FUNC_REGEX&gt;
1663                  <br>
1664                  <br> Provide a list of binaries as arguments to limit the search.
1665               </td>
1666         </tr>
1667
1668         <tr>
1669               <td class="header" colspan="2">Find full source line information.</td>
1670         </tr>
1671         <tr>
1672               <td class="content">
1673                  <b>(gdb)</b> info line 0x1ec4
1674                  <br>
1675               </td>
1676               <td class="content">
1677                  This one is a bit messy at present. Do:
1678                  <br>
1679                  <br>
1680                  <b>(lldb)</b> image lookup -v --address 0x1ec4
1681                  <br>
1682                  <br> and look for the LineEntry line, which will have the full source path and line range information.
1683                  <br>
1684               </td>
1685         </tr>
1686
1687         <tr>
1688               <td class="header" colspan="2">Look up information for an address in <b><code>a.out</code></b> only.</td>
1689         </tr>
1690         <tr>
1691               <td class="content">
1692               </td>
1693               <td class="content">
1694                  <b>(lldb)</b> image lookup --address 0x1ec4 a.out
1695                  <br>
1696                  <b>(lldb)</b> im loo -a 0x1ec4 a.out
1697                  <br>
1698               </td>
1699         </tr>
1700
1701         <tr>
1702               <td class="header" colspan="2">Look up information for for a type <code>Point</code> by name.</td>
1703         </tr>
1704         <tr>
1705               <td class="content">
1706                  <b>(gdb)</b> ptype Point
1707                  <br>
1708               </td>
1709               <td class="content">
1710                  <b>(lldb)</b> image lookup --type Point
1711                  <br>
1712                  <b>(lldb)</b> im loo -t Point
1713                  <br>
1714               </td>
1715         </tr>
1716
1717         <tr>
1718               <td class="header" colspan="2">Dump all sections from the main executable and any shared libraries.</td>
1719         </tr>
1720         <tr>
1721               <td class="content">
1722                  <b>(gdb)</b> maintenance info sections
1723                  <br>
1724               </td>
1725               <td class="content">
1726                  <b>(lldb)</b> image dump sections
1727                  <br>
1728               </td>
1729         </tr>
1730
1731         <tr>
1732               <td class="header" colspan="2">Dump all sections in the <b><code>a.out</code></b> module.</td>
1733         </tr>
1734         <tr>
1735               <td class="content">
1736               </td>
1737               <td class="content">
1738                  <b>(lldb)</b> image dump sections a.out
1739                  <br>
1740               </td>
1741         </tr>
1742
1743         <tr>
1744               <td class="header" colspan="2">Dump all symbols from the main executable and any shared libraries.</td>
1745         </tr>
1746         <tr>
1747               <td class="content">
1748               </td>
1749               <td class="content">
1750                  <b>(lldb)</b> image dump symtab
1751                  <br>
1752               </td>
1753         </tr>
1754
1755         <tr>
1756               <td class="header" colspan="2">Dump all symbols in <b><code>a.out</code></b> and <b><code>liba.so</code></b>.</td>
1757         </tr>
1758         <tr>
1759               <td class="content">
1760               </td>
1761               <td class="content">
1762                  <b>(lldb)</b> image dump symtab a.out liba.so
1763                  <br>
1764               </td>
1765         </tr>
1766
1767      </tbody>
1768   </table>
1769
1770Miscellaneous
1771-------------
1772
1773.. raw:: html
1774
1775   <table class="mapping" cellspacing="0">
1776      <tbody>
1777         <tr>
1778               <td class="hed" width="50%">GDB</td>
1779               <td class="hed" width="50%">LLDB</td>
1780         </tr>
1781
1782         <tr>
1783               <td class="header" colspan="2">Search command help for a keyword.</td>
1784         </tr>
1785         <tr>
1786               <td class="content">
1787                  <b>(gdb)</b> apropos keyword
1788                  <br>
1789               </td>
1790               <td class="content">
1791                  <b>(lldb)</b> apropos keyword
1792                  <br>
1793               </td>
1794         </tr>
1795
1796         <tr>
1797               <td class="header" colspan="2">Echo text to the screen.</td>
1798         </tr>
1799         <tr>
1800               <td class="content">
1801                  <b>(gdb)</b> echo Here is some text\n
1802                  <br>
1803               </td>
1804               <td class="content">
1805                  <b>(lldb)</b> script print "Here is some text"
1806                  <br>
1807               </td>
1808         </tr>
1809
1810         <tr>
1811               <td class="header" colspan="2">Remap source file pathnames for the debug session.  If your source files are no longer located in the same location as when the program was built (for example, if the program was built on a different computer) you need to tell the debugger how to find the sources at their local file path instead of the build system's file path.</td>
1812         </tr>
1813         <tr>
1814               <td class="content">
1815                  <b>(gdb)</b> set pathname-substitutions /buildbot/path /my/path
1816                  <br>
1817               </td>
1818               <td class="content">
1819                  <b>(lldb)</b> settings set target.source-map /buildbot/path /my/path
1820                  <br>
1821               </td>
1822         </tr>
1823
1824         <tr>
1825               <td class="header" colspan="2">Supply a catchall directory to search for source files in.</td>
1826         </tr>
1827         <tr>
1828               <td class="content">
1829                  <b>(gdb)</b> directory /my/path
1830                  <br>
1831               </td>
1832               <td class="content">
1833                  (<i>No equivalent command - use the source-map instead.</i>)
1834                  <br>
1835               </td>
1836         </tr>
1837
1838      </tbody>
1839   </table>
1840