Skill v1.0.1
currentLLM-judged scan90/1001 files
version: "1.0.1" name: lldb description: LLDB debugger skill for C/C++/Swift/Objective-C programs. Use when debugging with LLDB on macOS, FreeBSD, or Linux-clang environments, mapping GDB mental models to LLDB commands, using LLDB in Xcode or VS Code, or debugging Swift/Objective-C. Activates on queries about LLDB commands, GDB to LLDB migration, Apple platform debugging, LLDB Python scripting, or IDE-integrated debugging with clang-built binaries. user-invocable: true triggers:
- debug with LLDB
- GDB to LLDB migration
- LLDB commands
- debug Swift with LLDB
- LLDB in Xcode
- LLDB Python scripting
- Apple platform debugging LLDB
- LLDB VS Code integration
LLDB
Purpose
Guide agents through LLDB sessions and map existing GDB knowledge to LLDB. Covers command differences, Apple specifics, Python scripting, and IDE integration.
Triggers
- "I'm on macOS and need to debug a C++ program"
- "How does LLDB differ from GDB?"
- "How do I do [GDB command] in LLDB?"
- "LLDB shows
<unavailable>for variables" - "How do I use LLDB in VS Code?"
- "How do I write an LLDB Python script?"
Workflow
1. Start LLDB
lldb ./prog # load binarylldb ./prog -- arg1 arg2 # with argumentslldb -p 12345 # attach to PIDlldb -c core.1234 # load core dumplldb ./prog core.1234 # binary + core
2. GDB → LLDB command map
Source: <https://lldb.llvm.org/use/map.html>
| GDB | LLDB | Notes | |
|---|---|---|---|
run [args] | process launch [args] / r | ||
continue | process continue / c | ||
next | thread step-over / n | ||
step | thread step-in / s | ||
nexti | thread step-inst-over / ni | ||
stepi | thread step-inst / si | ||
finish | thread step-out / finish | ||
break main | breakpoint set -n main / b main | ||
break file.c:42 | breakpoint set -f file.c -l 42 / b file.c:42 | ||
break *0x400abc | breakpoint set -a 0x400abc / b -a 0x400abc | ||
watch x | watchpoint set variable x / wa s v x | ||
print x | frame variable x / p x | ||
print/x x | p/x x | ||
info locals | frame variable / fr v | ||
info args | frame variable --arguments | ||
backtrace | thread backtrace / bt | ||
frame N | frame select N / f N | ||
info threads | thread list | ||
thread N | thread select N | ||
thread apply all bt | thread backtrace all | ||
x/10wx addr | memory read -s4 -fx -c10 addr / x/10xw addr | ||
set var = 42 | expression var = 42 / expr var = 42 | ||
quit | quit / q |
3. Breakpoints
# By nameb mainbreakpoint set --name foobreakpoint set --name foo --condition 'x > 0'# By file:lineb file.c:42breakpoint set --file file.c --line 42# By addressb -a 0x100003f20# By regexbreakpoint set --func-regex '^MyClass::'# Listbreakpoint list / br l# Deletebreakpoint delete 2# Disable/enablebreakpoint disable 1breakpoint enable 1# Commands on hitbreakpoint command add 1> p x> continue> DONE
4. Inspect state
# Print variablep xframe variable xp *ptrp arr[0]# Print expressionexpression x * 2 + 1expr (int)sqrt(9.0)# All localsframe variablefr v -a # include arguments# Registersregister readregister read rip rsp# Memorymemory read --size 4 --format x --count 10 0x7fff0000x/10xw 0x7fff0000 # GDB-compatible syntax# Type infoimage lookup --type MyClasstype lookup MyClass
5. Watchpoints
watchpoint set variable x # write watchpointwatchpoint set variable -w read x # read watchpointwatchpoint set variable -w read_write xwatchpoint set expression -- &x # by addresswatchpoint listwatchpoint delete 1
6. Threads
thread listthread select 3thread backtrace allthread backtrace --count 5 # limit depth# Per-thread steppingthread step-over # step this thread only
7. macOS / Apple specifics
# Symbol lookup in shared cacheimage lookup --address 0x18ab12345image lookup --name objc_msgSend# Objective-C method breakpointb "-[NSArray objectAtIndex:]"b "+[NSString stringWithFormat:]"# Inspect Objective-C objectpo myObject # print-object (calls -description)po [arr count]# Show loaded librariesimage listimage list -b # brief (names only)
8. VS Code integration
Install the CodeLLDB extension. .vscode/launch.json:
{"version": "0.2.0","configurations": [{"name": "Debug (lldb)","type": "lldb","request": "launch","program": "${workspaceFolder}/build/prog","args": [],"cwd": "${workspaceFolder}","preLaunchTask": "build"}]}
9. LLDB Python scripting
import lldbdef print_all_threads(debugger, command, result, internal_dict):target = debugger.GetSelectedTarget()process = target.GetProcess()for thread in process:print(f"Thread {thread.GetIndexID()}: {thread.GetName()}")for frame in thread:print(f" {frame}")def __lldb_init_module(debugger, internal_dict):debugger.HandleCommand('command script add -f myscript.print_all_threads pthreads')
Load: command script import /path/to/myscript.py
For a full GDB↔LLDB command map, see references/gdb-lldb-map.md.
Related skills
- Use
skills/debuggers/gdbfor GDB workflows - Use
skills/debuggers/core-dumpsfor core dump analysis - Use
skills/compilers/clangfor building with debug info