Habilidad CLI de LLDB
Utiliza esta CLI para ejecutar flujos de trabajo de depuración estructurados con LLDB y obtener salida JSON.
Capacidades
- Crear objetivo de depuración desde la ruta de un ejecutable
- Lanzar un proceso o adjuntar por PID/nombre
- Gestionar puntos de interrupción (establecer/listar/eliminar/habilitar/deshabilitar)
- Inspeccionar hilos, marcos, variables locales y seguimiento de pila
- Evaluar expresiones en el marco actual
- Leer/encontrar memoria del proceso
- Cargar archivos core dump
- REPL interactivo con estado de sesión persistente
- Servidor formal del Protocolo de Adaptador de Depuración (DAP) para clientes de IA/editores
Comandos rápidos
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
Protocolo de Adaptador de Depuración (DAP)
Utiliza el punto de entrada DAP cuando un cliente de IA necesita un ciclo de vida de adaptador de depuración real en lugar de ejecutar comandos CLI separados:
cli-anything-lldb-dap
cli-anything-lldb-dap --profile /path/to/stop-rules.json
o:
cli-anything-lldb dap
cli-anything-lldb dap --profile /path/to/stop-rules.json
El servidor DAP se comunica mediante tramas Content-Length sobre stdio y debe tener stdout exclusivo. No imprimas registros en stdout a su alrededor. Las solicitudes admitidas incluyen initialize, launch, attach, configurationDone, setBreakpoints, setFunctionBreakpoints, threads, stackTrace, scopes, variables, setVariable, evaluate, continue, pause, next, stepIn, stepOut, source, loadedSources, readMemory, modules, exceptionInfo, disassemble y disconnect.
Las variables DAP pueden exponer referencias secundarias para structs/clases/arrays. Utiliza setVariable solo mientras esté detenido; LLDB puede rechazar escrituras en valores optimizados o de solo lectura.
Para procesos de larga duración con GUI, DAP continue no es bloqueante desde el punto de vista del cliente: el adaptador envía la respuesta y el evento continued primero, luego espera a LLDB en un hilo en segundo plano. DAP pause utiliza la interrupción asíncrona de LLDB. Si un agente necesita cambiar puntos de interrupción mientras el depurador está en ejecución, el adaptador interrumpe primero y espera un estado detenido antes de mutar los puntos de interrupción de LLDB; si el objetivo no se detiene a tiempo, reintenta después de un ciclo explícito pause/stopped.
Para aplicaciones GUI que se detienen en puntos de interrupción internos de inicio o shader-JIT, launch y attach aceptan el argumento booleano no estándar autoContinueInternalBreakpoints. Actívalo solo cuando esas paradas internas sean ruido para la tarea; el adaptador emite un evento output antes de continuar automáticamente. Para ruido específico del objetivo, prefiere reglas de parada estructuradas mediante stopRules en línea o un archivo JSON externo stopRuleProfile/--profile. Las reglas pueden coincidir por reason, module, function y/o regex, y luego stop con metadatos claros cliAnythingStop.origin o continue automáticamente. Utiliza perfiles para aplicaciones como C4D para que sus trampas shader-JIT/inicio de NVIDIA residan fuera del adaptador genérico.
Los eventos DAP stopped incluyen body.cliAnythingStop.origin: manualPause para una solicitud de pausa del cliente, internalTrap para una regla interna coincidente y debuggee para paradas ordinarias del programa. Los procesos existentes de cli-anything-lldb-dap no recargan en caliente nuevo código ni contenido de perfil; reinicia el adaptador y vuelve a adjuntar o relanzar antes de esperar que se apliquen nuevas reglas.
Grupos de comandos
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
Notas de uso para agentes
- Prefiere
--jsonpara todos los flujos automatizados. - Las invocaciones no REPL comparten un demonio de sesión persistente por defecto.
- Utiliza
--session-file RUTAoCLI_ANYTHING_LLDB_SESSION_FILEpara fijar una sesión explícita para una tarea. - Ejecuta
cli-anything-lldb --json session closeal finalizar para que los procesos adjuntos se desvinculen y los depurados lanzados se limpien. - Usa el REPL cuando un shell interactivo similar al humano sea más conveniente, no porque la persistencia lo requiera.
- Los puntos de interrupción CLI no resueltos fallan por defecto; pasa
--allow-pendingsolo cuando se espera que se cargue un módulo/símbolo futuro. - Los puntos de interrupción DAP no resueltos utilizan semántica de protocolo:
verified: falsehasta que se resuelvan. - DAP
continueno es bloqueante para procesos GUI de larga duración, y DAPpauseutiliza interrupción asíncrona. - Los cambios de puntos de interrupción DAP durante un continue activo primero interrumpen y esperan un estado detenido antes de mutar LLDB.
- Utiliza perfiles de reglas de parada DAP para paradas internas específicas de la aplicación; reinicia y vuelve a adjuntar/relanzar después de cambios en el perfil.
memory findutiliza un escaneo por fragmentos con un límite de 1 MiB por llamada.- Ejecuta
target createantes de los comandos de proceso o core. - Espera errores estructurados:
{"error": "...", "type": "..."}