4 Here's a short precis of how to run lldb if you are familiar with the gdb
5 command set. We will start with some details on lldb command structure and
6 syntax to help orient you.
11 Unlike gdb's command set, which is rather free-form, we tried to make the lldb command syntax fairly structured. The commands are all of the form:
15 <noun> <verb> [-options [option-value]] [argument [argument...]]
17 The command line parsing is done before command execution, so it is uniform
18 across all the commands. The command syntax for basic commands is very simple,
19 arguments, options and option values are all white-space separated, and
20 either single or double-quotes (in pairs) are used to protect white-spaces
21 in an argument. If you need to put a backslash or double-quote character in an
22 argument you back-slash it in the argument. That makes the command syntax more
23 regular, but it also means you may have to quote some arguments in lldb that
26 There is one other special quote character in lldb - the backtick.
27 If you put backticks around an argument or option value, lldb will run the text
28 of the value through the expression parser, and the result of the expression
29 will be passed to the command. So for instance, if "len" is a local
30 int variable with the value 5, then the command:
34 (lldb) memory read -c `len` 0x12345
36 will receive the value 5 for the count option, rather than the string "len".
39 Options can be placed anywhere on the command line, but if the arguments begin
40 with a "-" then you have to tell lldb that you're done with options for the
41 current command by adding an option termination: "--". So for instance, if you
42 want to launch a process and give the "process launch" command the
43 "--stop-at-entry" option, yet you want the process you are about to launch to
44 be launched with the arguments "-program_arg value", you would type:
48 (lldb) process launch --stop-at-entry -- -program_arg value
50 We also tried to reduce the number of special purpose argument parsers, which
51 sometimes forces the user to be a little more explicit about stating their
52 intentions. The first instance you'll note of this is the breakpoint command.
53 In gdb, to set a breakpoint, you might enter
59 to break at line 12 of foo.c, and:
65 to break at the function foo. As time went on, the parser that tells foo.c:12
66 from foo from foo.c::foo (which means the function foo in the file foo.c) got
67 more and more complex and bizarre, and especially in C++ there are times where
68 there's really no way to specify the function you want to break on. The lldb
69 commands are more verbose but also more precise and allow for intelligent auto
72 To set the same file and line breakpoint in LLDB you can enter either of:
76 (lldb) breakpoint set --file foo.c --line 12
77 (lldb) breakpoint set -f foo.c -l 12
79 To set a breakpoint on a function named foo in LLDB you can enter either of:
83 (lldb) breakpoint set --name foo
84 (lldb) breakpoint set -n foo
86 You can use the --name option multiple times to make a breakpoint on a set of
87 functions as well. This is convenient since it allows you to set common
88 conditions or commands without having to specify them multiple times:
92 (lldb) breakpoint set --name foo --name bar
94 Setting breakpoints by name is even more specialized in LLDB as you can specify
95 that you want to set a breakpoint at a function by method name. To set a
96 breakpoint on all C++ methods named foo you can enter either of:
100 (lldb) breakpoint set --method foo
101 (lldb) breakpoint set -M foo
104 To set a breakpoint Objective-C selectors named alignLeftEdges: you can enter either of:
108 (lldb) breakpoint set --selector alignLeftEdges:
109 (lldb) breakpoint set -S alignLeftEdges:
111 You can limit any breakpoints to a specific executable image by using the
112 "--shlib <path>" ("-s <path>" for short):
116 (lldb) breakpoint set --shlib foo.dylib --name foo
117 (lldb) breakpoint set -s foo.dylib -n foo
119 The --shlib option can also be repeated to specify several shared libraries.
121 Suggestions on more interesting primitives of this sort are also very welcome.
123 Just like gdb, the lldb command interpreter does a shortest unique string match
124 on command names, so the following two commands will both execute the same
129 (lldb) breakpoint set -n "-[SKTGraphicView alignLeftEdges:]"
130 (lldb) br s -n "-[SKTGraphicView alignLeftEdges:]"
132 lldb also supports command completion for source file names, symbol names, file
133 names, etc. Completion is initiated by a hitting a TAB. Individual options in a
134 command can have different completers, so for instance, the "--file <path>"
135 option in "breakpoint" completes to source files, the "--shlib <path>" option
136 to currently loaded shared libraries, etc. We can even do things like if you
137 specify "--shlib <path>", and are completing on "--file <path>", we will only
138 list source files in the shared library specified by "--shlib <path>".
140 The individual commands are pretty extensively documented. You can use the help
141 command to get an overview of which commands are available or to obtain details
142 about specific commands. There is also an apropos command that will search the
143 help text for all commands for a particular word and dump a summary help string
144 for each matching command.
146 Finally, there is a mechanism to construct aliases for commonly used commands.
147 For instance, if you get annoyed typing:
151 (lldb) breakpoint set --file foo.c --line 12
157 (lldb) command alias bfl breakpoint set -f %1 -l %2
160 We have added a few aliases for commonly used commands (e.g. "step", "next" and
161 "continue") but we haven't tried to be exhaustive because in our experience it
162 is more convenient to make the basic commands unique down to a letter or two,
163 and then learn these sequences than to fill the namespace with lots of aliases,
164 and then have to type them all the way out.
166 However, users are free to customize lldb's command set however they like, and
167 since lldb reads the file ~/.lldbinit at startup, you can store all your
168 aliases there and they will be generally available to you. Your aliases are
169 also documented in the help command so you can remind yourself of what you've
172 One alias of note that we do include by popular demand is a weak emulator of
173 gdb's "break" command. It doesn't try to do everything that gdb's break command
174 does (for instance, it doesn't handle foo.c::bar. But it mostly works, and
175 makes the transition easier. Also, by popular demand, it is aliased to b. If you
176 actually want to learn the lldb command set natively, that means it will get in
177 the way of the rest of the breakpoint commands. Fortunately, if you don't like
178 one of our aliases, you can easily get rid of it by running (for example):
182 (lldb) command unalias b
188 (lldb) command alias b breakpoint
190 so I can run the native lldb breakpoint command with just b
192 The lldb command parser also supports "raw" commands, where, after command
193 options are stripped off, the rest of the command string is passed
194 uninterpreted to the command. This is convenient for commands whose arguments
195 might be some complex expression that would be painful to backslash protect.
196 For instance, the "expression" command is a "raw" command for obvious reasons.
197 The "help" output for a command will tell you if it is "raw" or not, so you
198 know what to expect. The one thing you have to watch out for is that since raw
199 commands still can have options, if your command string has dashes in it,
200 you'll have to indicate these are not option markers by putting "--" after the
201 command name, but before your command string.
203 lldb also has a built-in Python interpreter, which is accessible by the
204 "script" command. All the functionality of the debugger is available as classes
205 in the Python interpreter, so the more complex commands that in gdb you would
206 introduce with the "define" command can be done by writing Python functions
207 using the lldb-Python library, then loading the scripts into your running
208 session and accessing them with the "script" command.
210 Having given an overview of lldb's command syntax, we proceed to lay out the
211 stages of a standard debug session.
214 Loading a Program into lldb
215 ---------------------------
217 First we need to set the program to debug. As with gdb, you can start lldb and specify the file you wish to debug on the command line:
221 $ lldb /Projects/Sketch/build/Debug/Sketch.app
222 Current executable set to '/Projects/Sketch/build/Debug/Sketch.app' (x86_64).
224 or you can specify it after the fact with the "file" command:
229 (lldb) file /Projects/Sketch/build/Debug/Sketch.app
230 Current executable set to '/Projects/Sketch/build/Debug/Sketch.app' (x86_64).
235 We've discussed how to set breakpoints above. You can use help breakpoint set
236 to see all the options for breakpoint setting. For instance, we might do:
240 (lldb) breakpoint set --selector alignLeftEdges:
241 Breakpoint created: 1: name = 'alignLeftEdges:', locations = 1, resolved = 1
243 You can find out about the breakpoints you've set with:
247 (lldb) breakpoint list
249 1: name = 'alignLeftEdges:', locations = 1, resolved = 1
250 1.1: where = Sketch`-[SKTGraphicView alignLeftEdges:] + 33 at /Projects/Sketch/SKTGraphicView.m:1405, address = 0x0000000100010d5b, resolved, hit count = 0
253 Note that setting a breakpoint creates a logical breakpoint, which could
254 resolve to one or more locations. For instance, break by selector would set a
255 breakpoint on all the methods that implement that selector in the classes in
256 your program. Similarly, a file and line breakpoint might result in multiple
257 locations if that file and line were inlined in different places in your code.
259 The logical breakpoint has an integer id, and its locations have an id within
260 their parent breakpoint (the two are joined by a ".", e.g. 1.1 in the example
263 Also, the logical breakpoints remain live so that if another shared library were
264 to be loaded that had another implementation of the "alignLeftEdges:" selector,
265 the new location would be added to breakpoint 1 (e.g. a "1.2" breakpoint would
266 be set on the newly loaded selector).
268 The other piece of information in the breakpoint listing is whether the
269 breakpoint location was resolved or not. A location gets resolved when the file
270 address it corresponds to gets loaded into the program you are debugging. For
271 instance if you set a breakpoint in a shared library that then gets unloaded,
272 that breakpoint location will remain, but it will no longer be resolved.
275 One other thing to note for gdb users is that lldb acts like gdb with:
279 (gdb) set breakpoint pending on
281 That is, lldb will always make a breakpoint from your specification, even if it
282 couldn't find any locations that match the specification. You can tell whether
283 the expression was resolved or not by checking the locations field in
284 "breakpoint list", and we report the breakpoint as "pending" when you set it so
285 you can tell you've made a typo more easily, if that was indeed the reason no
286 locations were found:
291 (lldb) breakpoint set --file foo.c --line 12
292 Breakpoint created: 2: file ='foo.c', line = 12, locations = 0 (pending)
293 WARNING: Unable to resolve breakpoint to any actual locations.
295 You can delete, disable, set conditions and ignore counts either on all the
296 locations generated by your logical breakpoint, or on any one of the particular
297 locations your specification resolved to. For instance, if we wanted to add a
298 command to print a backtrace when we hit this breakpoint we could do:
302 (lldb) breakpoint command add 1.1
303 Enter your debugger command(s). Type 'DONE' to end.
307 By default, the breakpoint command add command takes lldb command line
308 commands. You can also specify this explicitly by passing the "--command"
309 option. Use "--script" if you want to implement your breakpoint command using
310 the Python script instead.
312 This is a convenient point to bring up another feature of the lldb command
317 (lldb) help break command add
318 Add a set of commands to a breakpoint, to be executed whenever the breakpoint is hit.
320 Syntax: breakpoint command add <cmd-options> <breakpt-id>
323 When you see arguments to commands specified in the Syntax in angle brackets
324 like <breakpt-id>, that indicates that that is some common argument type that
325 you can get further help on from the command system. So in this case you could
330 (lldb) help <breakpt-id> <breakpt-id> -- Breakpoint ID's consist major and
331 minor numbers; the major etc...
337 Breakpoints carry two orthogonal sets of information: one specifies where to set the breakpoint, and the other how to react when the breakpoint is hit. The latter set of information (e.g. commands, conditions, hit-count, auto-continue...) we call breakpoint options.
339 It is fairly common to want to apply one set of options to a number of breakpoints. For instance, you might want to check that self == nil and if it is, print a backtrace and continue, on a number of methods. One convenient way to do that would be to make all the breakpoints, then configure the options with:
343 (lldb) breakpoint modify -c "self == nil" -C bt --auto-continue 1 2 3
345 That's not too bad, but you have to repeat this for every new breakpoint you make, and if you wanted to change the options, you have to remember all the ones you are using this way.
347 Breakpoint names provide a convenient solution to this problem. The simple solution would be to use the name to gather the breakpoints you want to affect this way into a group. So when you make the breakpoint you would do:
351 (lldb) breakpoint set -N SelfNil
353 Then when you've made all your breakpoints, you can set up or modify the options using the name to collect all the relevant breakpoints.
357 (lldb) breakpoint modify -c "self == nil" -C bt --auto-continue SelfNil
359 That is better, but suffers from the problem that when new breakpoints get
360 added, they don't pick up these modifications, and the options only exist in
361 the context of actual breakpoints, so they are hard to store & reuse.
363 An even better solution is to make a fully configured breakpoint name:
367 (lldb) breakpoint name configure -c "self == nil" -C bt --auto-continue SelfNil
369 Then you can apply the name to your breakpoints, and they will all pick up
370 these options. The connection from name to breakpoints remains live, so when
371 you change the options configured on the name, all the breakpoints pick up
372 those changes. This makes it easy to use configured names to experiment with
375 You can make breakpoint names in your .lldbinit file, so you can use them to
376 can behaviors that you have found useful and reapply them in future sessions.
378 You can also make a breakpoint name from the options set on a breakpoint:
382 (lldb) breakpoint name configure -B 1 SelfNil
384 which makes it easy to copy behavior from one breakpoint to a set of others.
389 In addition to breakpoints, you can use help watchpoint to see all the commands
390 for watchpoint manipulations. For instance, we might do the following to watch
391 a variable called 'global' for write operation, but only stop if the condition
392 '(global==5)' is true:
396 (lldb) watch set var global
397 Watchpoint created: Watchpoint 1: addr = 0x100001018 size = 4 state = enabled type = w
398 declare @ '/Volumes/data/lldb/svn/ToT/test/functionalities/watchpoint/watchpoint_commands/condition/main.cpp:12'
399 (lldb) watch modify -c '(global==5)'
402 Watchpoint 1: addr = 0x100001018 size = 4 state = enabled type = w
403 declare @ '/Volumes/data/lldb/svn/ToT/test/functionalities/watchpoint/watchpoint_commands/condition/main.cpp:12'
404 condition = '(global==5)'
406 Process 15562 resuming
407 (lldb) about to write to 'global'...
408 Process 15562 stopped and was programmatically restarted.
409 Process 15562 stopped and was programmatically restarted.
410 Process 15562 stopped and was programmatically restarted.
411 Process 15562 stopped and was programmatically restarted.
412 Process 15562 stopped
413 * thread #1: tid = 0x1c03, 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16, stop reason = watchpoint 1
414 frame #0: 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16
416 14 static void modify(int32_t &var) {
420 18 int main(int argc, char** argv) {
423 * thread #1: tid = 0x1c03, 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16, stop reason = watchpoint 1
424 frame #0: 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16
425 frame #1: 0x0000000100000eac a.out`main + 108 at main.cpp:25
426 frame #2: 0x00007fff8ac9c7e1 libdyld.dylib`start + 1
427 (lldb) frame var global
431 Watchpoint 1: addr = 0x100001018 size = 4 state = enabled type = w
432 declare @ '/Volumes/data/lldb/svn/ToT/test/functionalities/watchpoint/watchpoint_commands/condition/main.cpp:12'
433 condition = '(global==5)'
434 hw_index = 0 hit_count = 5 ignore_count = 0
437 Starting or Attaching to Your Program
438 -------------------------------------
440 To launch a program in lldb we use the "process launch" command or one of its built in aliases:
444 (lldb) process launch
448 You can also attach to a process by process ID or process name. When attaching
449 to a process by name, lldb also supports the "--waitfor" option which waits for
450 the next process that has that name to show up, and attaches to it
454 (lldb) process attach --pid 123
455 (lldb) process attach --name Sketch
456 (lldb) process attach --name Sketch --waitfor
458 After you launch or attach to a process, your process might stop somewhere:
462 (lldb) process attach -p 12345
463 Process 46915 Attaching
464 Process 46915 Stopped
465 1 of 3 threads stopped with reasons:
466 * thread #1: tid = 0x2c03, 0x00007fff85cac76a, where = libSystem.B.dylib`__getdirentries64 + 10, stop reason = signal = SIGSTOP, queue = com.apple.main-thread
468 Note the line that says "1 of 3 threads stopped with reasons:" and the lines
469 that follow it. In a multi-threaded environment it is very common for more than
470 one thread to hit your breakpoint(s) before the kernel actually returns control
471 to the debugger. In that case, you will see all the threads that stopped for
472 some interesting reason listed in the stop message.
474 Controlling Your Program
475 ------------------------
477 After launching, we can continue until we hit our breakpoint. The primitive commands for process control all exist under the "thread" command:
481 (lldb) thread continue
482 Resuming thread 0x2c03 in process 46915
483 Resuming process 46915
486 At present you can only operate on one thread at a time, but the design will ultimately support saying "step over the function in Thread 1, and step into the function in Thread 2, and continue Thread 3" etc. When we eventually support keeping some threads running while others are stopped this will be particularly important. For convenience, however, all the stepping commands have easy aliases. So "thread continue" is just "c", etc.
488 The other program stepping commands are pretty much the same as in gdb. You've got:
492 (lldb) thread step-in // The same as gdb's "step" or "s"
493 (lldb) thread step-over // The same as gdb's "next" or "n"
494 (lldb) thread step-out // The same as gdb's "finish" or "f"
496 By default, lldb does defined aliases to all common gdb process control commands ("s", "step", "n", "next", "finish"). If we have missed any, please add them to your ~/.lldbinit file using the "command alias" command.
498 lldb also supported the step by instruction versions:
503 (lldb) thread step-inst // The same as gdb's "stepi" / "si"
504 (lldb) thread step-over-inst // The same as gdb's "nexti" / "ni"
506 Finally, lldb has a run until line or frame exit stepping mode:
510 (lldb) thread until 100
512 This command will run the thread in the current frame till it reaches line 100
513 in this frame or stops if it leaves the current frame. This is a pretty close
514 equivalent to gdb's "until" command.
516 A process, by default, will share the lldb terminal with the inferior process.
517 When in this mode, much like when debugging with gdb, when the process is
518 running anything you type will go to the STDIN of the inferior process. To
519 interrupt your inferior program, type CTRL+C.
521 If you attach to a process, or launch a process with the "--no-stdin" option,
522 the command interpreter is always available to enter commands. It might be a
523 little disconcerting to gdb users to always have an (lldb) prompt. This allows
524 you to set a breakpoint, etc without having to explicitly interrupt the
525 program you are debugging:
529 (lldb) process continue
530 (lldb) breakpoint set --name stop_here
532 There are many commands that won't work while running, and the command
533 interpreter should do a good job of letting you know when this is the case. If
534 you find any instances where the command interpreter isn't doing its job,
535 please file a bug. This way of operation will set us up for a future debugging
536 mode called thread centric debugging. This mode will allow us to run all
537 threads and only stop the threads that are at breakpoints or have exceptions or
540 The commands that currently work while running include interrupting the process
541 to halt execution ("process interrupt"), getting the process status ("process
542 status"), breakpoint setting and clearing (" breakpoint
543 [set|clear|enable|disable|list] ..."), and memory reading and writing (" memory
546 The question of disabling stdio when running brings up a good opportunity to
547 show how to set debugger properties in general. If you always want to run in
548 the --no-stdin mode, you can set this as a generic process property using the
549 lldb "settings" command, which is equivalent to gdb's "set" command. For
550 instance, in this case you would say:
554 (lldb) settings set target.process.disable-stdio true
556 Over time, gdb's "set command became a wilderness of disordered options, so
557 that there were useful options that even experienced gdb users didn't know
558 about because they were too hard to find. We tried to organize the settings
559 hierarchically using the structure of the basic entities in the debugger. For
560 the most part anywhere you can specify a setting on a generic entity (threads,
561 for example) you can also apply the option to a particular instance, which can
562 also be convenient at times. You can view the available settings with "settings
563 list" and there is help on the settings command explaining how it works more
566 Examining Thread State
567 ----------------------
569 Once you've stopped, lldb will choose a current thread, usually the one that
570 stopped "for a reason", and a current frame in that thread (on stop this is
571 always the bottom-most frame). Many the commands for inspecting state work on
572 this current thread/frame.
574 To inspect the current state of your process, you can start with the threads:
579 Process 46915 state is Stopped
580 * thread #1: tid = 0x2c03, 0x00007fff85cac76a, where = libSystem.B.dylib`__getdirentries64 + 10, stop reason = signal = SIGSTOP, queue = com.apple.main-thread
581 thread #2: tid = 0x2e03, 0x00007fff85cbb08a, where = libSystem.B.dylib`kevent + 10, queue = com.apple.libdispatch-manager
582 thread #3: tid = 0x2f03, 0x00007fff85cbbeaa, where = libSystem.B.dylib`__workq_kernreturn + 10
584 The ``*`` indicates that Thread 1 is the current thread. To get a backtrace for
589 (lldb) thread backtrace
590 thread #1: tid = 0x2c03, stop reason = breakpoint 1.1, queue = com.apple.main-thread
591 frame #0: 0x0000000100010d5b, where = Sketch`-[SKTGraphicView alignLeftEdges:] + 33 at /Projects/Sketch/SKTGraphicView.m:1405
592 frame #1: 0x00007fff8602d152, where = AppKit`-[NSApplication sendAction:to:from:] + 95
593 frame #2: 0x00007fff860516be, where = AppKit`-[NSMenuItem _corePerformAction] + 365
594 frame #3: 0x00007fff86051428, where = AppKit`-[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 121
595 frame #4: 0x00007fff860370c1, where = AppKit`-[NSMenu performKeyEquivalent:] + 272
596 frame #5: 0x00007fff86035e69, where = AppKit`-[NSApplication _handleKeyEquivalent:] + 559
597 frame #6: 0x00007fff85f06aa1, where = AppKit`-[NSApplication sendEvent:] + 3630
598 frame #7: 0x00007fff85e9d922, where = AppKit`-[NSApplication run] + 474
599 frame #8: 0x00007fff85e965f8, where = AppKit`NSApplicationMain + 364
600 frame #9: 0x0000000100015ae3, where = Sketch`main + 33 at /Projects/Sketch/SKTMain.m:11
601 frame #10: 0x0000000100000f20, where = Sketch`start + 52
603 You can also provide a list of threads to backtrace, or the keyword "all" to see all threads:
607 (lldb) thread backtrace all
609 You can select the current thread, which will be used by default in all the
610 commands in the next section, with the "thread select" command:
614 (lldb) thread select 2
616 where the thread index is just the one shown in the "thread list" listing.
619 Examining Stack Frame State
620 ---------------------------
622 The most convenient way to inspect a frame's arguments and local variables is
623 to use the "frame variable" command:
627 (lldb) frame variable
628 self = (SKTGraphicView *) 0x0000000100208b40
629 _cmd = (struct objc_selector *) 0x000000010001bae1
630 sender = (id) 0x00000001001264e0
631 selection = (NSArray *) 0x00000001001264e0
632 i = (NSUInteger) 0x00000001001264e0
633 c = (NSUInteger) 0x00000001001253b0
635 As you see above, if you don't specify any variable names, all arguments and
636 locals will be shown. If you call "frame variable" passing in the names of a
637 particular local(s), only those variables will be printed. For instance:
641 (lldb) frame variable self
642 (SKTGraphicView *) self = 0x0000000100208b40
644 You can also pass in a path to some subelement of one of the available locals,
645 and that sub-element will be printed. For instance:
649 (lldb) frame variable self.isa
650 (struct objc_class *) self.isa = 0x0000000100023730
652 The "frame variable" command is not a full expression parser but it does
653 support a few simple operations like ``&``, ``*``, ``->``, ``[]`` (no
654 overloaded operators). The array brackets can be used on pointers to treat
659 (lldb) frame variable *self
660 (SKTGraphicView *) self = 0x0000000100208b40
662 (NSResponder) NSResponder = {
665 (lldb) frame variable &self
666 (SKTGraphicView **) &self = 0x0000000100304ab
668 (lldb) frame variable argv[0]
669 (char const *) argv[0] = 0x00007fff5fbffaf8 "/Projects/Sketch/build/Debug/Sketch.app/Contents/MacOS/Sketch"
671 The frame variable command will also perform "object printing" operations on
672 variables (currently we only support ObjC printing, using the object's
673 "description" method. Turn this on by passing the -o flag to frame variable:
677 (lldb) frame variable -o self (SKTGraphicView *) self = 0x0000000100208b40 <SKTGraphicView: 0x100208b40>
678 You can select another frame to view with the "frame select" command
680 (lldb) frame select 9
681 frame #9: 0x0000000100015ae3, where = Sketch`function1 + 33 at /Projects/Sketch/SKTFunctions.m:11
683 You can also move up and down the stack by passing the "--relative" ("-r") option. And we have built-in aliases "u" and "d" which behave like their gdb equivalents.