Calc/debug_templates/README.md

177 lines
4.9 KiB
Markdown

# 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