# Templates de Debug - Simple Debug API Esta carpeta contiene templates predefinidos para debuggear diferentes aspectos de la Calculadora MAV CAS. ## Uso Básico ```bash # Ejecutar un template python simple_debug.py debug_templates/basic_test.json # Con archivo de salida personalizado python simple_debug.py debug_templates/basic_test.json --output mi_debug.json # Con información detallada python simple_debug.py debug_templates/basic_test.json --verbose ``` ## Templates Disponibles ### `basic_test.json` **Propósito**: Pruebas básicas de funcionalidad - Operaciones con FourBytes (IPs) - Operaciones con IntBase (números en diferentes bases) - Variables y tabla de símbolos - Funciones de SymPy ### `tokenization_test.json` **Propósito**: Debug del sistema de tokenización - Análisis de expresiones complejas - Información de reglas de tokenización - Procesamiento de expressions mixtas (IP + hex) ### `regression_test.json` **Propósito**: Testing de regresión para casos específicos - Verificación de tipos: FourBytes, IntBase, IP4Mask - Operaciones simbólicas - Substitución de variables ### `error_debug.json` **Propósito**: Debug de manejo de errores - Máscaras IP inválidas - IPs fuera de rango - Números hexadecimales malformados - División por cero - Variables indefinidas ### `context_debug.json` **Propósito**: Debug del contexto y estado del motor - Tabla de símbolos - Tipos registrados - Contexto base - Sistema de ecuaciones ### `display_format_test.json` **Propósito**: Demostración de diferentes tipos de resultados - Diferentes tipos de resultados (IP, hex, símbolos, matrices) - Comentarios y errores - Verificación del comportamiento de la aplicación ## Formato de Template Cada template es un archivo JSON con esta estructura: ```json { "queries": [ { "index": 0, "type": "input", "content": "10.1.1.1 + 1" }, { "index": 1, "type": "exec", "content": "type(engine.last_result).__name__" } ] } ``` ### Tipos de Query - **`input`**: Evalúa expresiones como si las escribieras en la calculadora - **`exec`**: Ejecuta código Python para inspeccionar el estado interno del motor ## Casos de Uso Comunes ### Debug de un Bug Específico 1. Copia `basic_test.json` a `mi_bug_debug.json` 2. Modifica las queries para reproducir el bug 3. Añade queries `exec` para inspeccionar el estado 4. Ejecuta: `python simple_debug.py mi_bug_debug.json` ### Verificar una Nueva Funcionalidad 1. Crea un template con queries `input` que usen la nueva funcionalidad 2. Añade queries `exec` para verificar el estado interno 3. Compara resultados antes y después de los cambios ### Testing de Regresión 1. Usa `regression_test.json` como base 2. Añade casos específicos que deben mantenerse funcionando 3. Ejecuta regularmente para detectar regresiones ## Funciones Útiles para Queries `exec` ### Estado del Motor ```python "engine.symbol_table" # Variables actuales "engine.last_result" # Último resultado "engine.symbolic_mode" # ¿Modo simbólico? "len(engine.equations)" # Cantidad de ecuaciones ``` ### Información de Tipos ```python "type(engine.last_result).__name__" # Tipo del resultado "engine.get_available_types()" # Tipos disponibles "list(engine.registered_types_info['registered_classes'].keys())" ``` ### Tokenización ```python "engine.parser.get_tokenization_info()" # Info de tokenización "engine.parser.process_expression('test')" # Procesar expresión ``` ### Análisis de Objetos ```python "engine.last_result.original" # String original (FourBytes) "engine.last_result.base" # Base numérica (IntBase) "engine.last_result.has_symbols" # ¿Tiene símbolos? ``` ## Formato de Resultado ### Resultado Individual para Query `input` ```json { "index": 0, "input": "10.1.1.1 + 1", "output": "10.1.1.2", "result_type": "FourBytes", "success": true, "error": null } ``` ### Resultado Individual para Query `exec` ```json { "index": 1, "input": "type(engine.last_result).__name__", "output": "FourBytes", "result_type": "str", "success": true, "error": null, "exec_result": "FourBytes" } ``` ### Campos del Resultado - **`output`**: Texto tal como se muestra en la aplicación (queries `input`) - **`exec_result`**: Valor directo de la evaluación Python (queries `exec`) - **`result_type`**: Tipo del objeto resultado - **`success`**: `true` si la evaluación fue exitosa - **`error`**: Mensaje de error si `success` es `false` ## Tips - Usa `index` secuencial para facilitar la lectura de resultados - Combina queries `input` y `exec` para verificar comportamiento y estado - El archivo de resultados contiene información detallada de éxito/error - **Usa `output` para ver exactamente el texto que muestra la aplicación** - Puedes copiar y modificar templates existentes para casos específicos