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:

  1. El compilador genera bytecode normalmente
  2. El debugger inicia la VM en modo controlado (DebugState::Running)
  3. Antes de cada opcode, verifica si hay un breakpoint en la línea actual
  4. Si hay breakpoint o el usuario solicita paso a paso, pausa la ejecución y espera comandos

Estados del Debugger

EstadoDescripción
RunningEjecución libre hasta el próximo breakpoint
PausedPausado en una línea, esperando comando del usuario
StepOverEjecutar hasta la próxima línea en el mismo frame
StepIntoEjecutar hasta la próxima línea (puede entrar a funciones)
StepOutEjecutar hasta retornar de la función actual

Estructuras Principales

EstructuraDescripción
FrameDebugInformación de un frame del call stack: id, nombre, línea, IP, variables locales
VarDebugInformación de una variable: nombre, valor, tipo

API Pública

FunciónDescripció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:

🔍 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.