Calc/debug_templates/README.md

188 lines
5.6 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 formatos de display y output_raw
- Diferentes tipos de resultados (IP, hex, símbolos, matrices)
- Comentarios y errores
- Comparación entre `output` y `output_raw`
## 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,
"display_class": "[FourBytes]",
"output_raw": {
"parts": [
["custom_type", "10.1.1.2"],
["class_hint", "[FourBytes]"]
],
"formatted_text": "[custom_type]10.1.1.2[class_hint][FourBytes]",
"tag_info": {
"custom_type": {"fg": "#f9a825"},
"class_hint": {"fg": "#888888"}
}
}
}
```
### Campos del Resultado
- **`output`**: Resultado básico (antes del post-procesamiento)
- **`output_raw`**: Resultado exacto como se muestra en la aplicación
- **`parts`**: Lista de tuplas `[tag, contenido]` con información de color/formato
- **`formatted_text`**: Texto formateado como se vería en la aplicación
- **`tag_info`**: Información de colores y estilos para cada tag
- **`result_type`**: Tipo del objeto resultado
- **`display_class`**: Nombre de clase para mostrar
### Tags de Color Disponibles
- **`error`**: `#ff6b6b` (rojo) - Errores
- **`result`**: `#abdbe3` (azul claro) - Resultados generales
- **`symbolic`**: `#82aaff` (azul) - Expresiones simbólicas
- **`numeric`**: `#c3e88d` (verde) - Aproximaciones numéricas
- **`custom_type`**: `#f9a825` (naranja) - Tipos personalizados
- **`ip`**: `#fff176` (amarillo) - Direcciones IP
- **`hex`**: `#f9a825` (naranja) - Números hexadecimales
- **`class_hint`**: `#888888` (gris) - Pistas de clase
## 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_raw` para entender exactamente cómo se mostraría el resultado en la aplicación**
- Puedes copiar y modificar templates existentes para casos específicos