Registros locales y depuración
Lee los registros del programa, el consumo de unidades de cómputo y los errores de transacción en validadores locales sin límites de tasa RPC.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
solana-test-validator
solana logs
anchor test
solana confirm -v <SIGNATURE>Cuándo recurrir a esto:
- Iterando sobre la salida de
msg!durante el desarrollo de instrucciones. - Midiendo CU antes del despliegue en mainnet.
- Depurando fallos de pruebas de Anchor con metadatos completos.
- Comparando códigos de error locales vs. devnet.
Ejemplo de trabajo
# Terminal 1
solana-test-validator --reset
# Terminal 2
solana config set --url http://127.0.0.1:8899
solana logs
# Terminal 3
anchor test --skip-local-validator
# Después del fallo, inspecciona la firma de la salida de la prueba
solana confirm -v <SIG>Lo que esto demuestra:
- La salida estándar del validador y
solana logsmuestran la salida del programa. - Las pruebas de Anchor imprimen firmas en caso de fallo para el seguimiento con
confirm -v. - El entorno local elimina el ruido de RPC de devnet de la depuración.
Profundización
Cómo funciona
- Los programas registran a través de
msg!,sol_logysol_log_compute_units. - Los metadatos de la transacción incluyen
logMessagesycomputeUnitsConsumed. - Las transacciones fallidas aún devuelven registros hasta la instrucción fallida.
- El validador local permite llamadas ilimitadas a
simulateTransaction.
Lista de verificación de depuración
| Señal | Herramienta | Acción |
|---|---|---|
| Líneas del programa | solana logs | Rastrea la ruta de la instrucción |
| Código de error | confirm -v | Mapea al enum Error del programa |
| Uso de CU | campo de metadatos | Ajusta la ix del presupuesto de cómputo |
| Estado de la cuenta | solana account | Verifica propietarios y datos |
Notas de bash
# Prueba detallada de Anchor
anchor test -- --nocapture
# RUST_LOG para el entorno de prueba fuera de la cadena
RUST_LOG=debug anchor testTrampas
- El spam de registros alcanza los límites -
msg!excesivo trunca los registros y consume CU. Solución: registra solo discriminadores y resúmenes. - Registros faltantes en la ruta de éxito - instrucción omitida debido a una guarda temprana. Solución: registra en los puntos de entrada de las ramas.
- Ignorar CU en pruebas locales - pasa localmente, falla en mainnet congestionada. Solución: establece el presupuesto de cómputo basándose en la CU simulada con margen.
- Orden incorrecto de terminales - el suscriptor de registros se inicia después de la tx. Solución: inicia
solana logsantes de enviar transacciones. - Confundir la salida estándar del validador con registros RPC - ambos muestran salida; correlaciona con firmas. Solución: incluye la firma en
msg!solo en compilaciones de desarrollo.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Pruebas LiteSVM | Bucles unitarios de Rust de subsegundo | Depuración del cliente de billetera |
simulateTransaction | Preflight del lado del cliente | Transmisión de tráfico en vivo |
| Surfpool simulate | Escenarios de bifurcación de mainnet | Trabajo mínimo solo de programa |
solana logs de devnet | Repositorio compartido con compañeros de equipo | Bucle interno rápido |
Preguntas frecuentes
¿A dónde van los registros de pruebas de Anchor?
Salida estándar del validador de pruebas y solana logs - habilita -- --nocapture para la salida de println de pruebas de Rust.
¿Cómo veo CU por instrucción?
Usa sol_log_compute_units en el programa o lee el total computeUnitsConsumed en los metadatos después de las pasadas de optimización.
¿Por qué se truncan los registros?
Solana limita los bytes de registro por transacción - reduce la verbosidad.
¿Puedo filtrar registros por ID de programa?
solana logs admite filtros de mención - consulta solana logs --help.
¿Aparecen los registros de CPI?
Sí - las invocaciones internas se indentan en el orden de logMessages.
¿Cómo depuro errores de programa personalizados?
Mapea los códigos numéricos a los enums #[error_code] en Anchor o a las variantes manuales de ProgramError.
¿La depuración local coincide con mainnet?
La semántica de ejecución se alinea en Agave 4.1.1; la congestión y las rutas de tarifas de prioridad difieren.
¿Puedo guardar registros en un archivo?
Redirige solana logs o captura metadatos JSON de solana transaction.
¿Qué pasa con los registros de LiteSVM?
LiteSVM 0.6.x captura registros en aserciones de prueba sin suscripciones WebSocket.
¿Cómo depuro el presupuesto de cómputo?
Agrega ComputeBudgetInstruction::set_compute_unit_limit en el cliente y compara el consumido con el límite en los metadatos.
Relacionado
- Registros y depuración - comandos de registro de la CLI
- solana-test-validator - clúster local
- Estimación de Unidades de Cómputo - ajuste de CU
- Conceptos básicos de pruebas - pirámide de pruebas
Versiones de la pila: Esta página se escribió para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, y LiteSVM 0.6.x.