Progresso...
PowerRustCOBOL — Registro de cambios
[2.1.0] — 2026-05-30
Fase 7 — Depurador
El IDE ahora cuenta con un depurador interactivo completo para programas COBOL.
Nuevo: tipos de canal DebugCmd y DebugEvent (cobol-runtime/src/debugger.rs)
Dos enums tipados cruzan el límite de hilo entre el IDE y el intérprete:
DebugCmd — Continue, StepOver, Pause — enviado desde el IDE al intérprete para controlar la ejecución.
DebugEvent — Paused { line, col, paragraph, vars }, Resumed, Finished — enviado desde el intérprete de vuelta al IDE.
Breakpoints (Arc<Mutex<HashSet<u32>>>) — conjunto compartido y seguro para hilos con los números de línea de breakpoints activos, escrito por el IDE y leído por el intérprete.
Actualizado: Interpreter — hook de depuración por sentencia
Interpreter::new_with_debug_channels() es un nuevo constructor que conecta los canales de depuración al intérprete. Antes de cada sentencia, exec_stmts() ahora llama a debug_check(), que:
Extrae la línea fuente de la sentencia mediante Stmt::span().
Comprueba si la línea coincide con un breakpoint o si debug_stepping es verdadero, en modo StepOver.
Si se cumple una condición de pausa, envía DebugEvent::Paused con una captura completa de variables (CobolEnvironment::iter() → lista VarSnapshot) y bloquea en debug_cmd_rx.recv() hasta que el IDE envíe Continue o StepOver.
Un comando asincrónico Pause se gestiona mediante una consulta no bloqueante try_recv() en cada sentencia cuando aún no está pausado.
DebugEvent::Finished se envía cuando run() termina normalmente o mediante STOP RUN.
current_paragraph se actualiza al entrar en cada párrafo, de modo que el evento Paused siempre lleva el nombre correcto del párrafo.
Nuevo: DebugRunner (cobol-ide/src/runner.rs)
DebugRunner es un componente hermano de Runner que gestiona una sesión de depuración:
start(file_name, source) — ejecuta todo el flujo lex → parse → semantic y luego lanza Interpreter::new_with_debug_channels() en un hilo en segundo plano.
send_cmd(DebugCmd) — reenvía un comando de paso, continuación o pausa al hilo.
drain_events() -> Vec<DebugEvent> — recopila los eventos de depuración pendientes en cada frame.
drain_run() -> Vec<RunMsg> — recopila los mensajes de ejecución pendientes, incluidos diagnósticos, salida y finalización.
pub breakpoints: Breakpoints — el IDE escribe aquí las líneas de breakpoint antes de llamar a start(); el puntero compartido se pasa directamente al intérprete.
stop() — descarta cmd_tx, lo que desbloquea cualquier recv() en el intérprete y causa Err(_) → StopRun; luego une el hilo.
Nuevo: panel lateral del depurador (cobol-ide/src/panels/debugger.rs)
DebuggerPanel se renderiza en un panel lateral derecho redimensionable mientras una sesión de depuración está activa:
Barra de pasos — ▶ Continue (F5), ⤵ Step Over (F10), ⏸ Pause. Los botones se deshabilitan cuando el intérprete está ejecutándose, es decir, no pausado.
Indicador de ubicación — nombre del párrafo y línea fuente, con indicador de estado codificado por color: ● Running / ● Paused.
Tabla de observación de variables — muestra todos los elementos de datos de CobolEnvironment en una cuadrícula rayada de dos columnas, nombre / valor, con búsqueda mediante un cuadro de filtro.
Nuevo: gutter de breakpoints en editor.rs
La columna de números de línea del editor de código ahora es un gutter de breakpoints totalmente interactivo:
Al hacer clic en cualquier número de línea se alterna un círculo rojo de breakpoint (●) en esa línea.
Cuando el depurador pausa, una flecha amarilla (→) y una fila resaltada marcan la línea de ejecución actual.
EditorPanel::breakpoints: HashMap<PathBuf, HashSet<u32>> almacena breakpoints activos por archivo.
breakpoints_for(path) devuelve el conjunto de líneas para un archivo dado, usado por do_debug() para inicializar los Breakpoints compartidos antes de iniciar la sesión.
Nuevo: botón 🐛 Debug en la barra de herramientas y atajos de teclado
Una barra secundaria aparece debajo de la barra principal:
🐛 Debug — inicia una sesión de depuración para el archivo activo; queda deshabilitado mientras una ejecución normal está activa. Sincroniza automáticamente los breakpoints del gutter del editor con DebugRunner::breakpoints antes de comenzar.
■ Stop Debug — descarta el canal de comandos, hace una detención controlada, reinicia el panel del depurador y limpia el resaltado de la línea de depuración en el editor.
F5 — Continue mientras una sesión está activa.
F10 — Step Over mientras una sesión está activa.
Adiciones de i18n en los 5 idiomas
Nuevas claves: panel_debugger, dbg_continue, dbg_step_over, dbg_pause, dbg_stop, dbg_variables, dbg_filter_hint, dbg_debug.
|