Debugger Integrado (DAP)
Archivo: src/debugger.rs (710 líneas)
¿Por qué existe?
Implementa un depurador paso a paso con soporte para breakpoints y el protocolo DAP (Debug Adapter Protocol) de Microsoft. Envuelve la VM ForjaFast y controla la ejecución opcode por opcode, permitiendo pausar, inspeccionar variables, y ejecutar paso a paso (step over/into/out).
Arquitectura
El debugger se sitúa como una capa entre el compilador y la VM. Cuando el usuario ejecuta forja debug archivo.fa:
- El compilador genera bytecode normalmente
- El debugger inicia la VM en modo controlado (
DebugState::Running) - Antes de cada opcode, verifica si hay un breakpoint en la línea actual
- Si hay breakpoint o el usuario solicita paso a paso, pausa la ejecución y espera comandos
Estados del Debugger
| Estado | Descripción |
|---|---|
Running | Ejecución libre hasta el próximo breakpoint |
Paused | Pausado en una línea, esperando comando del usuario |
StepOver | Ejecutar hasta la próxima línea en el mismo frame |
StepInto | Ejecutar hasta la próxima línea (puede entrar a funciones) |
StepOut | Ejecutar hasta retornar de la función actual |
Estructuras Principales
| Estructura | Descripción |
|---|---|
FrameDebug | Información de un frame del call stack: id, nombre, línea, IP, variables locales |
VarDebug | Información de una variable: nombre, valor, tipo |
API Pública
| Función | Descripción |
|---|---|
Debugger::new() | Crea una nueva instancia del debugger |
colocar_breakpoint(linea) | Establece un breakpoint en la línea especificada |
ejecutar(modelo) | Inicia la ejecución con control de debugger |
step_over() / step_into() / step_out() | Comandos de ejecución paso a paso |
obtener_variables() | Retorna las variables locales del frame actual |
obtener_call_stack() | Retorna la pila de llamadas completa |
Integración DAP
El archivo src/bin/forja_dap.rs implementa el servidor DAP que permite a cualquier editor compatible (VS Code, Neovim, etc.) usar el debugger de Forja con interfaz gráfica. El protocolo DAP maneja:
- initialize: Negociar capacidades del debugger
- setBreakpoints: Establecer breakpoints desde el editor
- stackTrace: Obtener la pila de llamadas
- scopes / variables: Inspeccionar variables en cada frame
- continue / nextIn / stepIn / stepOut: Control de ejecución
🔍 Uso: Ejecutá
forja debug ejemplo.fa para usar el debugger en terminal, o configurá VS Code para usar el adaptador DAP en src/bin/forja_dap.rs.