Token导航 LogoToken导航

Agent Skill · 研究检索

axiom-lldb(公理 lldb)

axiom-lldb 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

axiom-lldb 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证信息还不明确,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 32,343。

总安装 2,540周安装 108GitHub Stars 873下载 890核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:axiom-lldb(公理 lldb)
来源仓库:https://github.com/charleswiltgen/axiom
仓库路径:skills/axiom-lldb
安装命令:
npx skills add https://github.com/charleswiltgen/axiom --skill axiom-lldb
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/charleswiltgen/axiom --skill axiom-lldb

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

用于查找、检索和筛选相关信息。适合在 Codex、Claude、Cursor、Gemini CLI 中根据关键词、任务场景或来源线索快速定位候选结果。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

axiom-lldb 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/axiom-lldb

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/charleswiltgen/axiom --skill axiom-lldb;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

axiom-lldb 怎么安装?

在终端执行 npx skills add https://github.com/charleswiltgen/axiom --skill axiom-lldb。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

axiom-lldb 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

axiom-lldb 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

axiom-lldb 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

axiom-lldb 用的人多吗?

公开数据是累计安装 2,540 次,近一周安装 108 次,下载 890 次,GitHub 873 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

axiom-lldb 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
axiom-lldb

公理 lldb · 本页

2,540873需要联网未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

LLDB Debugging

Interactive debugging with LLDB. The debugger freezes time so you can interrogate your running app — inspect variables, evaluate expressions, navigate threads, and understand exactly why something went wrong.

Core insight: "LLDB is useless" really means "I don't know which command to use for Swift types." This is a knowledge-gap problem, not a tool problem.

Red Flags — Check This Skill When

SymptomThis Skill Applies
Need to inspect a variable at runtimeYes — breakpoint + inspect
Crash you can reproduce locallyYes — breakpoint before crash site
Wrong value at runtime but code looks correctYes — step through and inspect
Need to understand thread state during hangYes — pause + thread backtrace
po doesn't work / shows garbageYes — Playbook 3 has alternatives
Crash log analyzed, need to reproduceYes — set breakpoints from crash context
Need to test a fix without rebuildingYes — expression evaluation
Want to break on all exceptionsYes — exception breakpoints
App feels slow but responsiveNo — use axiom-performance-profiling
Memory grows over timeNo — use axiom-memory-debugging first
App completely frozenMaybe — use axiom-hang-diagnostics first, then LLDB for thread inspection
Crash in production, no local reproNo — use axiom-testflight-triage first

LLDB vs Other Tools

digraph tool_selection {
    "What do you need?" [shape=diamond];

    "axiom-testflight-triage" [shape=box];
    "axiom-hang-diagnostics" [shape=box];
    "axiom-memory-debugging" [shape=box];
    "axiom-performance-profiling" [shape=box];
    "LLDB (this skill)" [shape=box, style=bold];

    "What do you need?" -> "axiom-testflight-triage" [label="Crash log from field,\ncan't reproduce locally"];
    "What do you need?" -> "axiom-hang-diagnostics" [label="App frozen,\nneed diagnosis approach"];
    "What do you need?" -> "axiom-memory-debugging" [label="Memory growing,\nneed leak pattern"];
    "What do you need?" -> "axiom-performance-profiling" [label="Need to measure\nCPU/memory over time"];
    "What do you need?" -> "LLDB (this skill)" [label="Need to inspect state\nat a specific moment"];
}

Rule of thumb: Instruments *measures*. LLDB *inspects*. If you need to understand what's happening at a specific moment in time, use LLDB. If you need to understand trends over time, use Instruments.

Response Format

When helping with LLDB debugging, structure your output as:

  1. Immediate diagnosis (1-3 bullets, confidence-tagged: HIGH/MEDIUM/LOW)
  2. Commands to run (numbered, copy-paste ready, with (lldb) prefix)
  3. What to look for (command → expected output → interpretation)
  4. Likely root causes (ranked by probability)
  5. Next breakpoint plan (catch it earlier next time)
  6. If no debugger attached (crash-log-only fallback path)

Playbook 1: Crash Triage

Goal: Understand why the app crashed, starting from the stop point.

Step 1: Read the Stop Reason

When the debugger stops, the first thing to check:

(lldb) thread info

This shows the stop reason. Common stop reasons:

Stop ReasonMeaningNext Step
EXC_BAD_ACCESS (SIGSEGV)Accessed invalid memory (null pointer, dangling reference)Check the address — 0x0 to 0x10 = nil dereference
EXC_BAD_ACCESS (SIGBUS)Misaligned or invalid addressUsually C interop or unsafe pointer issue
EXC_BREAKPOINT (SIGTRAP)Hit a trap — Swift runtime check failedCheck for fatalError(), preconditionFailure(), force-unwrap of nil, array out of bounds
EXC_CRASH (SIGABRT)Deliberate abort — assertion or uncaught exceptionLook at "Application Specific Information" for the message
breakpointYour breakpoint was hitNormal — inspect state

Step 2: Get the Backtrace

(lldb) bt

Read top-to-bottom. Find the first frame in YOUR code (not system frameworks). That's where to start investigating.

(lldb) bt 10

Limit to 10 frames if the full trace is noisy.

Step 3: Navigate to Your Frame

(lldb) frame select 3

Jump to frame 3 (or whichever frame is in your code).

Step 4: Inspect State

(lldb) v
(lldb) v self.someProperty
(lldb) v localVariable

Use v (not po) for reliable Swift value inspection. See Playbook 3 for details.

Step 5: Classify and Fix

Exception TypeTypical CauseFix Pattern
EXC_BAD_ACCESS at low addressForce-unwrap nil optionalguard let / if let
EXC_BAD_ACCESS at high addressUse-after-free / dangling pointerCheck object lifetime, [weak self]
EXC_BREAKPOINTSwift runtime trap (bounds, unwrap, precondition)Fix the violated precondition
SIGABRTUncaught ObjC exception or fatalError()Read the exception message, fix the root cause

Step 6: Set a Conditional Breakpoint to Catch It Earlier

(lldb) breakpoint set -f MyFile.swift -l 42 -c "value == nil"

This breaks only when value is nil at line 42 — catches the problem before the crash.


Playbook 2: Hang/Deadlock Diagnosis

Goal: Understand why the app is frozen by inspecting all thread states.

Step 1: Pause the App

If the app is hung, press the pause button in Xcode (⌃⌘Y) or:

(lldb) process interrupt

Step 2: Get All Thread Backtraces

(lldb) thread backtrace all

Or the shorthand:

(lldb) bt all

Step 3: Classify Thread States

Look at Thread 0 (main thread) — it processes all UI events. If it's blocked, the app is frozen.

Main thread blocked on synchronous wait:

frame #0: libsystem_kernel.dylib`__psynch_mutexwait
frame #1: libsystem_pthread.dylib`_pthread_mutex_firstfit_lock_wait
...
frame #5: MyApp`ViewController.viewDidLoad()

Translation: Main thread is waiting for a mutex lock. Something else holds it.

Main thread blocked on dispatch_sync:

frame #0: libdispatch.dylib`_dispatch_sync_f_slow
...
frame #3: MyApp`DataManager.fetchData()

Translation: DispatchQueue.main.sync called from background → classic deadlock.

Main thread busy (CPU-bound):

frame #0: MyApp`ImageProcessor.processAllImages()
frame #1: MyApp`ViewController.viewDidLoad()

Translation: Expensive work on main thread. Move to background.

Step 4: Check for Deadlocks

If two threads are both waiting on something the other holds:

(lldb) thread list

Look for multiple threads with state waiting that reference each other's locks.

Step 5: Inspect Specific Thread

(lldb) thread select 3
(lldb) bt
(lldb) v

Switch to another thread to inspect its state.

Cross-reference: For fix patterns once you've identified the hang cause → /skill axiom-hang-diagnostics


Playbook 3: Swift Value Inspection

This is the core value of this skill. Most developers abandon LLDB because po doesn't work reliably with Swift types. Here's what actually works.

The Four Print Commands

CommandFull FormWhat It DoesBest For
vframe variableReads memory directly, no compilationSwift structs, enums, locals — your default
pexpression (with formatter)Compiles expression, shows formatted resultComputed properties, function calls
poexpression --object-descriptionCalls debugDescriptionClasses with CustomDebugStringConvertible
exprexpressionEvaluates arbitrary codeCalling methods, modifying state

When to Use Each

Start with v — it's fastest and most reliable for stored properties:

(lldb) v self.userName
(lldb) v self.items[0]
(lldb) v localStruct

v works by reading memory directly. It doesn't compile anything, so it can't fail due to expression compilation errors.

v limitation: It only reads stored properties — computed properties, lazy var (before first access), and property wrapper projected values ($binding) won't show meaningful values. If a field looks wrong or missing with v, try p instead.

Use p when v can't reach it:

(lldb) p self.computedProperty
(lldb) p self.items.count
(lldb) p someFunction()

p compiles and executes the expression. Needed for computed properties and function calls.

Use po for class descriptions:

(lldb) po myObject
(lldb) po error
(lldb) po notification

po calls debugDescription on the result. Best for objects that have meaningful descriptions (NSError, Notification, etc.).

The "LLDB Is Broken" Moments

What You SeeWhyFix
<uninitialized>po failed; variable hasn't been populated by optimizerUse v instead
expression failed to parse, unknown type nameSwift expression parser can't resolve the typeTry expr -l objc -- (id)0x12345 for ObjC objects, or use v
<variable not available>Compiler optimized it out (Release build)Rebuild with Debug, per-file -Onone, or register read as last resort
error: Couldn't apply expression side effectsExpression had side effects LLDB couldn't reverseTry a simpler expression; avoid mutating state
po shows memory address instead of valueObject doesn't conform to CustomDebugStringConvertibleUse v for raw value, or implement the protocol
cannot find 'self' in scopeBreakpoint is in a context without self (static, closure)Use v with the explicit variable name
p shows $R0 =... but po crashesDifferent compilation pathsUse p when it works; po adds an extra description step that can fail

Inspecting Optionals

(lldb) v optionalValue

Shows: (String?) some = "hello" or (String?) none

Don't use po optionalValue — it may show just Optional("hello") which is less useful.

Inspecting Collections

(lldb) v myArray
(lldb) v myArray[2]
(lldb) v myDict

For large collections, limit output:

(lldb) p Array(myArray.prefix(5))

Inspecting SwiftUI State

SwiftUI @State is backed by stored properties with underscore prefix:

(lldb) v self._isPresented
(lldb) v self._items

For @Observable models:

(lldb) v self.viewModel.propertyName

Diagnosing "view doesn't update": If a property changes (confirmed with v) but the SwiftUI view doesn't re-render, check which thread the mutation happens on with bt. @Observable mutations must happen on @MainActor for SwiftUI to observe them — mutations on a background actor won't trigger view updates. Use Self._printChanges() inside a view body to see which property triggered (or didn't trigger) a re-render:

(lldb) expr Self._printChanges()

For the full observation diagnostic tree → /skill axiom-swiftui-debugging

Inspecting Actors

Actor state is best inspected with v, which reads memory directly without isolation concerns:

(lldb) v actor

Shows all stored properties. This works because LLDB pauses the entire process — you can read any memory regardless of actor isolation (which is a compile-time concept).

Modifying Values at Runtime

(lldb) expr self.debugFlag = true
(lldb) expr myArray.append("test")
(lldb) expr self.view.backgroundColor = UIColor.red

Modify values without rebuilding. Useful for testing theories.

Referencing Previous Results

LLDB assigns result variables ($R0, $R1, etc.):

(lldb) p someValue
$R0 = 42
(lldb) p $R0 + 10
$R1 = 52

Playbook 4: Breakpoint Strategies

Source Breakpoints (Basic)

(lldb) breakpoint set -f ViewController.swift -l 42
(lldb) b ViewController.swift:42

Short form b works for simple cases.

Conditional Breakpoints

Break only when a condition is true:

(lldb) breakpoint set -f MyFile.swift -l 42 -c "index > 100"
(lldb) breakpoint set -f MyFile.swift -l 42 -c "name == \"test\""

Iteration-based: Break after N hits:

(lldb) breakpoint set -f MyFile.swift -l 42 -i 50

Ignores the first 50 hits, then breaks.

Logpoints (Action + Auto-Continue)

Log without stopping — like a print statement but no rebuild needed:

(lldb) breakpoint set -f MyFile.swift -l 42
(lldb) breakpoint command add 1
> v self.value
> continue
> DONE

Or in Xcode: Edit breakpoint → Add Action → "Log Message" → use @self.value@ token syntax → Check "Automatically continue"

Symbolic Breakpoints

Break on ANY call to a method by name:

(lldb) breakpoint set -n viewDidLoad
(lldb) breakpoint set -n "MyClass.myMethod"

Break on all ObjC messages to a selector:

(lldb) breakpoint set -S "layoutSubviews"

Exception Breakpoints

Swift errors (break on throw):

(lldb) breakpoint set -E swift

Objective-C exceptions (break on throw):

(lldb) breakpoint set -E objc

In Xcode: Breakpoint Navigator → + → Swift Error Breakpoint / Exception Breakpoint

This is the single most useful breakpoint for crash debugging. It stops at the throw site instead of the catch/crash site.

Watchpoints

Break when a variable's value changes:

(lldb) watchpoint set variable self.count
(lldb) watchpoint set variable -w read_write myGlobal

Watchpoints are hardware-backed — limited to ~4 per process but very fast.

One-Shot Breakpoints

Break once, then auto-delete:

(lldb) breakpoint set -f MyFile.swift -l 42 -o

Managing Breakpoints

(lldb) breakpoint list
(lldb) breakpoint disable 3
(lldb) breakpoint enable 3
(lldb) breakpoint delete 3
(lldb) breakpoint delete

Playbook 5: Async/Concurrency Debugging

Identifying Async Frames

Swift concurrency backtraces are noisy — expect swift_task_switch, _dispatch_call_block_and_release, and executor internals mixed in with your code. Don't be discouraged by 40+ frames of runtime noise. Focus on frames from YOUR module.

In Swift concurrency backtraces, look for swift-task frames:

Thread 3:
frame #0: MyApp`MyActor.doWork()
frame #1: swift_task_switch
frame #2: MyApp`closure #1 in ViewController.loadData()

The swift_task_switch frame indicates an async suspension point. Your code frames are the ones prefixed with your module name (MyApp above).

Inspecting Task State

(lldb) thread backtrace all

Look for threads with swift_task in their frames. Each represents an active Swift task.

Actor-Isolated Code

When stopped inside an actor:

(lldb) v self

Shows all actor state. This works because LLDB pauses the entire process — actor isolation is a compile-time concept, not a runtime lock (for default actors).

Task Group Inspection

When debugging task groups, break inside the group closure and inspect:

(lldb) v
(lldb) bt

Each child task runs on its own thread. Use bt all to see them.

Cross-reference: For Swift concurrency patterns and fix strategies → /skill axiom-swift-concurrency. For profiling async performance → /skill axiom-concurrency-profiling


Pressure Scenarios

Scenario 1: "Release-Only Crash — LLDB Is Useless in Release"

Situation: Crash happens in Release builds but not Debug. Team says "we can't debug it."

Why this fails: Release optimizations change timing, memory layout, and can eliminate variables — making the crash non-reproducible in Debug.

Correct approach:

  1. Build with Debug configuration but Release-like settings:

- Optimization Level: -O (not -Onone) - Still include debug symbols (DEBUG_INFORMATION_FORMAT = dwarf-with-dsym)

  1. Enable Address Sanitizer (-fsanitize=address) — catches memory errors with 2-3x overhead
  2. Use the crash report to set breakpoints at the crash site
  3. Set exception breakpoints to catch the error before the crash: (lldb) breakpoint set -E swift (lldb) breakpoint set -E objc
  4. If variable shows <optimized out>, reduce optimization for that one file:

- Build Settings → Per-file flags → -Onone for the specific file

  1. Last resort — read register values directly (variables live in registers before being optimized out): (lldb) register read (lldb) register read x0 x1 x2 On ARM64: x0 = self, x1-x7 = first 7 arguments. Check /skill axiom-lldb-ref Part 1 for details.

Scenario 2: "Just Add Print Statements"

Situation: Developer adds print() calls to debug, rebuilds, runs, reads console. Repeat.

Why this fails: Each print-debug cycle costs 3-5 minutes (edit → build → run → navigate to state → read output). An LLDB breakpoint costs 30 seconds.

Correct approach:

  1. Set a breakpoint at the line you'd add a print(): (lldb) b MyFile.swift:42
  2. Add a logpoint for "print-like" behavior without rebuilding:

- Edit breakpoint → Add Action → Log Message → Check "Auto continue"

  1. Inspect variables directly: v self.someValue
  2. Modify variables at runtime to test theories: expr self.debugMode = true
  3. One breakpoint session replaces 5-10 print-debug cycles.

Time comparison (typical control-flow debugging):

ApproachPer investigation5 variables
print() statements3-5 min (build + run)15-25 min
LLDB breakpoint30 sec (set + inspect)2.5 min

Exception: In tight loops (thousands of hits/sec), logpoints add per-hit overhead. Use -i to skip to the iteration you care about, or use a temporary print() for that specific loop.

Scenario 3: "po Doesn't Work So LLDB Is Broken"

Situation: Developer types po myStruct and gets garbage. Concludes LLDB is broken for Swift. Goes back to print debugging.

This is the #1 reason developers abandon LLDB.

Why po fails with Swift structs: po calls debugDescription which requires compiling an expression in the debugger context. For Swift structs, this compilation often fails due to missing type metadata, generics, or module resolution issues.

Correct approach:

  1. Use v instead of po — reads memory directly, no compilation: (lldb) v myStruct (lldb) v myStruct.propertyName
  2. Use p for computed properties: (lldb) p myStruct.computedValue
  3. Use po only for classes with CustomDebugStringConvertible
  4. If p also fails, try specifying the language: (lldb) expr -l objc -- (id)0x12345
  5. If everything fails, v self always works inside a method.

Anti-Patterns

Anti-PatternWhy It's WrongBetter Alternative
po everythingFails for Swift structs, enums, optionalsv for values, po only for classes
Print-debug cycles3-5 min per cycle vs 30 sec breakpointBreakpoints with logpoint actions
"LLDB doesn't work with Swift"It does — wrong command choicev is designed for Swift values
Ignoring backtracesJumping to guesses instead of reading the tracebt first, then navigate frames
Conditional breakpoints on every hitSlows execution if condition is expensiveUse -i (ignore count) when possible
Debugging optimized (Release) buildsVariables missing, code reorderedDebug configuration, or per-file -Onone
Force-continuing past exceptionsHides the real errorFix the exception, don't suppress it
No exception breakpoints setCrashes land in system code, not throw siteAlways add Swift Error + ObjC Exception breakpoints

Debugging Checklist

Before starting a debug session:

  • Debug build configuration (not Release)
  • Exception breakpoints enabled (Swift Error + ObjC Exception)
  • Breakpoint set before suspected problem area
  • Know which command to use: v for values, p for computed, po for descriptions

During debug session:

  • Read stop reason (thread info) before anything else
  • Get backtrace (bt) — find your frame
  • Navigate to your frame (frame select N)
  • Inspect relevant state (v self, v localVar)
  • Understand the cause before writing any fix

After finding the issue:

  • Set conditional breakpoint to catch recurrence
  • Consider adding assertion/precondition for this case
  • Remove temporary breakpoints

Resources

WWDC: 2019-429, 2018-412, 2022-110370

Docs: /xcode/stepping-through-code-and-inspecting-variables-to-isolate-bugs, /xcode/setting-breakpoints-to-pause-your-running-app, /xcode/diagnosing-memory-thread-and-crash-issues-early

Skills: axiom-lldb-ref, axiom-testflight-triage, axiom-hang-diagnostics, axiom-memory-debugging, axiom-swift-concurrency, axiom-concurrency-profiling

平台分布

Codex

36.04%
按下载量换算321

Claude

27.36%
按下载量换算244

Cursor

19.39%
按下载量换算173

Gemini CLI

9.87%
按下载量换算88

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills