LLDB (debugger)
reliable, independent, third-party sources. (February 2015) ) |
Developer(s) | LLVM Developer Group |
---|---|
Stable release | 18.1.3[1]
/ 4 April 2024 |
Repository | |
Written in | Apache License 2.0 with LLVM Exceptions (v9.0.0 or later)[2] |
Website | lldb |
The LLDB Debugger (LLDB) is the
Current state
LLDB supports debugging of programs written in
The LLDB debugger is known to work on
Feature | FreeBSD | Linux | macOS | NetBSD | Windows
|
---|---|---|---|---|---|
Backtracing | |||||
Breakpoints | |||||
C++11 | ? | ||||
Command-line lldb tool | |||||
Core file debugging | |||||
Debugserver (remote debugging) | |||||
Disassembly |
|||||
Expression evaluation |
Works with some bugs | Works with some bugs | Works with some bugs | Works with some bugs | |
JIT debugging | ? | Symbolic debugging only | Untested | Work In Progress | |
Objective-C 2.0: | ? | — | ? | — |
Examples of commands
lldb program
|
Debug "program" (from the shell) |
---|---|
run
|
Run the loaded program |
break set -n main
|
Set a breakpoint at the start of function "main" |
bt
|
Backtrace (in case the program crashed) |
register read
|
Dump all registers |
di -n main
|
Disassemble the function "main" |
An example session
Consider the following incorrect program written in C:
#include <stdio.h>
int main(void)
{
char msg = "Hello, world!\n";
printf("%s", msg);
return 0;
}
Using the
$ clang -g test.c -o test
And the binary can now be run:
$ ./test
Segmentation fault
Since the example code, when executed, generates a segmentation fault, lldb can be used to inspect the problem:
$ 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
(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.dylib`vfprintf_l + 54
frame #4: 0x00007fff6c666f72 libsystem_c.dylib`printf + 174
frame #5: 0x0000000100000f6d test`main 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
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#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:
(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.
See also
- GNU Debugger
- Microsoft Visual Studio Debugger
References
- ^ "Release 18.1.3". 4 April 2024. Retrieved 16 April 2024.
- ^ a b LICENSE.TXT, llvm.org, retrieved 2019-09-24
- ^ "LLVM Release License"
- ^ "LLVM Project Blog". 20 January 2015.
- ^ a b "LLDB Status". Retrieved January 31, 2022.
- ^ "Debug your app".
- ^ "Add a new tool named "lldb-vscode" that implements the Visual Studio Code Debug Adaptor Protocol".
- ^ "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".
- ^ "CDT/Useer/FAQ".
- ^ "LLDB CLion Blog".
- ^ "Technical Note TN2151: Understanding and Analyzing Application Crash Reports". Documentation Archive. Apple Developer. Retrieved 13 February 2020.