177 lines
4.9 KiB
Markdown
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 |