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><args></code>.</td> 44 </tr> 45 <tr> 46 <td class="content"> 47 <b>(gdb)</b> run <args> 48 <br> 49 <b>(gdb)</b> r <args> 50 </td> 51 <td class="content"> 52 <b>(lldb)</b> process launch -- <args> 53 <br> 54 <b>(lldb)</b> run <args> 55 <br> 56 <b>(lldb)</b> r <args> 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 -- <args> 120 <br> 121 <b>(lldb)</b> pro la -t -- <args> 122 <br> 123 </td> 124 </tr> 125 126 <tr> 127 <td class="header" colspan="2">Launch a process with arguments <code><args></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 -- <args> 134 <br> 135 <b>(lldb)</b> pro la -t/dev/ttys006 -- <args> 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 <RETURN EXPRESSION> 375 <br> 376 </td> 377 <td class="content"> 378 <b>(lldb)</b> thread return <RETURN EXPRESSION> 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> > bt 393 <br> > disassemble --pc 394 <br> > 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 <FUNC_REGEX> 1653 <br> 1654 </td> 1655 <td class="content"> 1656 This one finds debug symbols: 1657 <br> 1658 <b>(lldb)</b> image lookup -r -n <FUNC_REGEX> 1659 <br> 1660 <br> This one finds non-debug symbols: 1661 <br> 1662 <b>(lldb)</b> image lookup -r -s <FUNC_REGEX> 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