LLDB (debugger)

Software debugger


title: "LLDB (debugger)" type: doc version: 1 created: 2026-02-28 author: "Wikipedia contributors" status: active scope: public tags: ["debuggers", "free-software-programmed-in-c++", "lua-(programming-language)-scriptable-software", "software-using-the-university-of-illinois/ncsa-open-source-license", "software-using-the-apache-license", "video-game-development-software-for-linux"] description: "Software debugger" topic_path: "technology/operating-systems" source: "https://en.wikipedia.org/wiki/LLDB_(debugger)" license: "CC BY-SA 4.0" wikipedia_page_id: 0 wikipedia_revision_id: 0

::summary Software debugger ::

::data[format=table title="Infobox software"]

FieldValue
nameLLDB
screenshotLLDB screenshot.png
developerLLVM Developer Group
latest release version
latest release date
operating systemmacOS i386 and x86-64, Linux, FreeBSD, NetBSD, Windows
genreDebugger
programming languageC++
licenseUIUC (BSD-style)
Apache License 2.0 with LLVM Exceptions (v9.0.0 or later)
website
::

| name = LLDB | screenshot = LLDB screenshot.png | developer = LLVM Developer Group | latest release version = | latest release date = | latest preview version = | latest preview date = | operating system = macOS i386 and x86-64, Linux, FreeBSD, NetBSD, Windows | genre = Debugger | programming language = C++ | license = UIUC (BSD-style) Apache License 2.0 with LLVM Exceptions (v9.0.0 or later) | website =

The LLDB Debugger (LLDB) is the debugger created by Chris Lattner as a component of the LLVM project. It is built as a set of reusable components which extensively use existing libraries from LLVM, such as the Clang expression parser and LLVM disassembler. LLDB is free and open-source software under the University of Illinois/NCSA Open Source License, a BSD-style permissive software license. Since v9.0.0, it was relicensed to the Apache License 2.0 with LLVM Exceptions.

Current state

LLDB supports debugging of programs written in C, Objective-C, and C++. The Swift community maintains a version which adds support for the language. Free Pascal and the Lazarus IDE can use LLDB as backend for their own FpDebug engine.

The LLDB debugger is known to work on macOS, Linux, FreeBSD, NetBSD and Windows, and supports i386, x86-64, and ARM instruction sets. LLDB is the default debugger for Xcode 5 and later. Android Studio also uses LLDB for debug. LLDB can be used from other IDEs, including Visual Studio Code, C++Builder, Eclipse, and CLion. ::data[format=table title="Features matrix "]

FeatureFreeBSDLinuxmacOSNetBSDWindows
Backtracing
Breakpoints
C++11
Command-line lldb tool
Core file debugging
Debugserver (remote debugging)
Disassembly
Expression evaluation
JIT debugging
Objective-C 2.0:
::

Examples of commands

::data[format=table]

lldb programrunbreak set -n mainbt register readdi -n main
Debug "program" (from the shell)
Run the loaded program
Set a breakpoint at the start of function "main"
Backtrace (in case the program crashed)
Dump all registers
Disassemble the function "main"
::

An example session

Consider the following incorrect program written in C:

::code[lang=c] #include <stdio.h>

int main(void) { char msg = "Hello, world!\n"; printf("%s", msg);

return 0; } ::

Using the clang compiler on macOS, the code above can be compiled using the -g flag to include appropriate debug information on the binary generated—including the source code—making it easier to inspect it using LLDB. Assuming that the file containing the code above is named test.c, the command for the compilation could be: ::code[lang=console] $ clang -Wno-error=int-conversion -g test.c -o test ::

And the binary can now be run: ::code[lang=console] $ ./test Segmentation fault ::

Since the example code, when executed, generates a segmentation fault, lldb can be used to inspect the problem: ::code[lang=console] $ lldb test (lldb) target create "test" Current executable set to 'test' (x86_64). (lldb) run Process 70716 launched: '/Users/wikipedia/test' (x86_64) Process 70716 stopped

  • thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xffffff90) frame #0: 0x00007fff6c7c46f2 libsystem_platform.dylib_platform_strlen + 18 libsystem_platform.dylib_platform_strlen: -> 0x7fff6c7c46f2 <+18>: pcmpeqb xmm0, xmmword ptr [rdi] 0x7fff6c7c46f6 <+22>: pmovmskb esi, xmm0 0x7fff6c7c46fa <+26>: and rcx, 0xf 0x7fff6c7c46fe <+30>: or rax, -0x1 Target 0: (test) stopped. ::

The problem occurs when calling the function [strlen](strlen-strlen), but we can run a backtrace to identify the exact line of code that is causing the problem: ::code[lang=console] (lldb) bt

  • thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xffffff90)
    • frame #0: 0x00007fff6c7c46f2 libsystem_platform.dylib_platform_strlen + 18 frame #1: 0x00007fff6c66b16a libsystem_c.dylib__vfprintf + 8812 frame #2: 0x00007fff6c6911c3 libsystem_c.dylib__v2printf + 475 frame #3: 0x00007fff6c668e22 libsystem_c.dylibvfprintf_l + 54 frame #4: 0x00007fff6c666f72 libsystem_c.dylibprintf + 174 frame #5: 0x0000000100000f6d testmain at test.c:5:2 frame #6: 0x00007fff6c5dc3d5 libdyld.dylib`start + 1 (lldb) source list 3 int main(void) { 4 char msg = "Hello, world!\n"; 5 printf("%s", msg); 6 return 0; 7 } ::

From the line beginning with frame #5, LLDB indicates that the error is at line 5 of test.c. Running source list, we see that this refers to the call to printf. According to the exception code EXC_BAD_ACCESS from the backtrace, strlen is trying to read from a region of memory it does not have access to by dereferencing an invalid pointer. Returning to the source code, we see that the variable msg is of type char but contains a string instead of a character. To fix the problem, we modify the code to indicate that msg is a pointer to a string of chars by adding the * operator: ::code[lang=c] #include <stdio.h>

int main(void) { char* msg = "Hello, world!\n"; printf("%s", msg);

return 0; } ::

After recompiling and running the executable again, LLDB now gives the correct result: ::code[lang=console] (lldb) target create "test" Current executable set to 'test' (x86_64). (lldb) run Process 93319 launched: '/Users/wikipedia/test' (x86_64) Hello, world! Process 93319 exited with status = 0 (0x00000000) (lldb) ::

LLDB runs the program, which prints the output of printf to the screen. After the program exits normally, LLDB indicates that the process running the program has completed, and prints its exit status.

References

References

  1. "LICENSE.TXT". llvm.org.
  2. [http://llvm.org/releases/2.1/LICENSE.TXT "LLVM Release License"]
  3. (20 January 2015). "LLVM Project Blog".
  4. "LLDB Status".
  5. "Debug your app".
  6. "Add a new tool named "lldb-vscode" that implements the Visual Studio Code Debug Adaptor Protocol".
  7. "11.3 introduces a new LLDB-based debugger for macOS Intel and 32-bit Android. With 11.3 all non-Windows platform debuggers across Delphi and C++ have moved to LLDB architecture.".
  8. "CDT/Useer/FAQ".
  9. (7 October 2024). "LLDB CLion Blog".
  10. "Technical Note TN2151: Understanding and Analyzing Application Crash Reports". Apple Developer.

::callout[type=info title="Wikipedia Source"] This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page. ::

debuggersfree-software-programmed-in-c++lua-(programming-language)-scriptable-softwaresoftware-using-the-university-of-illinois/ncsa-open-source-licensesoftware-using-the-apache-licensevideo-game-development-software-for-linux