LLDB CLIスキル
このCLIを使用して、JSON出力付きの構造化LLDBデバッグワークフローを実行します。
機能
- 実行可能ファイルパスからデバッグターゲットを作成
- プロセスの起動、またはPID/名前によるアタッチ
- ブレークポイントの管理(設定/一覧表示/削除/有効化/無効化)
- スレッド、フレーム、ローカル変数、バックトレースの調査
- 現在のフレームでの式評価
- プロセスメモリの読み取り/検索
- コアダンプの読み込み
- 永続的セッション状態を持つ対話型REPL
- AI/エディタクライアント向けの正式なstdio Debug Adapter Protocolサーバー
クイックコマンド
cli-anything-lldb --json target create --exe /path/to/exe
cli-anything-lldb --json process launch --arg foo --arg bar
cli-anything-lldb --json breakpoint set --function main
cli-anything-lldb --json breakpoint set --function PluginEntry --allow-pending
cli-anything-lldb --json process continue
cli-anything-lldb --json process interrupt
cli-anything-lldb --json thread backtrace --limit 20
cli-anything-lldb --json frame locals
cli-anything-lldb --json expr "myVar"
cli-anything-lldb --json memory read --address 0x1000 --size 64
cli-anything-lldb --json session close
Debug Adapter Protocol
AIクライアントが個別のCLIコマンドをシェルアウトする代わりに、実際のデバッグアダプタライフサイクルを必要とする場合は、DAPエントリポイントを使用します:
cli-anything-lldb-dap
cli-anything-lldb-dap --profile /path/to/stop-rules.json
または:
cli-anything-lldb dap
cli-anything-lldb dap --profile /path/to/stop-rules.json
DAPサーバーはstdio Content-Length フレームを使用し、排他的にstdoutを使用する必要があります。その周辺でログをstdoutに出力しないでください。サポートされているリクエストには、initialize、launch、attach、configurationDone、setBreakpoints、setFunctionBreakpoints、threads、stackTrace、scopes、variables、setVariable、evaluate、continue、pause、next、stepIn、stepOut、source、loadedSources、readMemory、modules、exceptionInfo、disassemble、disconnect が含まれます。
DAP変数は、構造体/クラス/配列の子参照を公開できます。setVariable は停止中のみ使用してください。最適化により除去された値や読み取り専用の値に対して、LLDBは書き込みを拒否する場合があります。
長時間実行されるGUIデバッグ対象の場合、DAP continue はクライアントから見て非ブロッキングです:アダプタは最初にレスポンスと continued イベントを送信し、その後バックグラウンドスレッドでLLDBを待機します。DAP pause はLLDB非同期割り込みを使用します。エージェントがデバッグ対象の実行中にブレークポイントを変更する必要がある場合、アダプタは最初に割り込みをかけ、停止状態を待ってからLLDBブレークポイントを変更します。対象が時間内に停止しない場合は、明示的な pause/stopped サイクルの後に再試行してください。
デバッガ内部の起動時やシェーダーJITブレークポイントで停止するGUIアプリの場合、launch および attach は非標準のブール引数 autoContinueInternalBreakpoints を受け入れます。これらの内部停止がタスクにとってノイズである場合にのみ有効にしてください。アダプタは自動継続の前に output イベントを発行します。ターゲット固有のノイズに対しては、インライン stopRules または外部の stopRuleProfile/--profile JSONファイルによる構造化された停止ルールを推奨します。ルールは reason、module、function、または regex で一致し、明確な cliAnythingStop.origin メタデータとともに stop するか、自動的に continue できます。C4Dなどのアプリでは、NVIDIAシェーダーJIT/起動トラップが汎用アダプタの外部に存在するようにプロファイルを使用します。
DAP stopped イベントには、body.cliAnythingStop.origin が含まれます:クライアントの一時停止リクエストの場合は manualPause、一致した内部ルールの場合は internalTrap、通常のプログラム停止の場合は debuggee。既存の cli-anything-lldb-dap プロセスは新しいコードやプロファイルの内容をホットロードしません。新しいルールを適用する前に、アダプタを再起動して再アタッチまたは再起動してください。
コマンドグループ
target
cli-anything-lldb --json target create --exe /path/to/exe [--arch x86_64]
cli-anything-lldb --json target info
process
cli-anything-lldb --json process launch [--arg ARG ...] [--env KEY=VALUE ...] [--cwd DIR] [--stop-at-entry]
cli-anything-lldb --json process attach --pid 1234
cli-anything-lldb --json process attach --name myapp --wait-for
cli-anything-lldb --json process continue
cli-anything-lldb --json process interrupt
cli-anything-lldb --json process detach
cli-anything-lldb --json process info
breakpoint
cli-anything-lldb --json breakpoint set --function main
cli-anything-lldb --json breakpoint set --file main.c --line 42 --condition "i > 10"
cli-anything-lldb --json breakpoint set --function LateLoadedSymbol --allow-pending
cli-anything-lldb --json breakpoint list
cli-anything-lldb --json breakpoint delete --id 1
cli-anything-lldb --json breakpoint enable --id 1
cli-anything-lldb --json breakpoint disable --id 1
thread / frame / step
cli-anything-lldb --json thread list
cli-anything-lldb --json thread select --id 11111
cli-anything-lldb --json thread backtrace --limit 50
cli-anything-lldb --json frame select --index 0
cli-anything-lldb --json frame info
cli-anything-lldb --json frame locals
cli-anything-lldb --json step over
cli-anything-lldb --json step into
cli-anything-lldb --json step out
expr / memory / core
cli-anything-lldb --json expr "argc"
cli-anything-lldb --json memory read --address 0x1000 --size 128
cli-anything-lldb --json memory find "needle" --start 0x1000 --size 4096
cli-anything-lldb --json core load --path /path/to/core
エージェント使用上の注意
- すべての自動化フローでは
--jsonを推奨します。 - REPL以外の呼び出しは、デフォルトで永続的なセッションデーモンを共有します。
--session-file PATHまたはCLI_ANYTHING_LLDB_SESSION_FILEを使用して、タスクの明示的なセッションを固定します。- 終了時に
cli-anything-lldb --json session closeを実行して、アタッチされたプロセスをデタッチし、起動されたデバッグ対象をクリーンアップします。 - 人間のような対話型シェルがより便利な場合にREPLを使用します。永続性が必要だからではありません。
- 未解決のCLIブレークポイントはデフォルトで失敗します。将来のモジュール/シンボルロードが予想される場合にのみ
--allow-pendingを渡します。 - DAP未解決ブレークポイントはプロトコルセマンティクスを使用します:解決されるまで
verified: false。 - 長時間実行されるGUIプロセスの場合、DAP
continueは非ブロッキングで、DAPpauseは非同期割り込みを使用します。 - アクティブな継続中のDAPブレークポイント変更は、最初に割り込みをかけ、停止状態を待ってからLLDBを変更します。
- アプリ固有の内部トラップにはDAP停止ルールプロファイルを使用します。プロファイルの変更後は再起動して再アタッチ/再起動します。
memory findはチャンクスキャンを使用し、呼び出しごとに最大1 MiBに制限されています。- プロセスまたはコアコマンドの前に
target createを呼び出します。 - 構造化エラーを想定します:
{"error": "...", "type": "..."}