Modos de depuración
Los contratos Soroban son, en la medida de lo posible, programas regulares de Rust y se pueden depurar utilizando las mismas herramientas que normalmente usarías.
Las instalaciones de depuración disponibles difieren significativamente dependiendo de si un contrato se compila de forma nativa para pruebas locales o se compila en Wasm para su implementación.
Decidir entre estos dos modos y aprovecharlos al máximo mientras depuras requiere una comprensión cuidadosa de qué código está incorporado en los contratos implementados y qué código está disponible solo para pruebas locales.
Modo de pruebas locales
Es posible (y se recomienda durante el desarrollo) compilar contratos Soroban nativamente (por ej., como código x86-64 o AArch64) y enlazar con el entorno del host directamente, de manera que el contrato no sea un huésped ejecutándose en una máquina virtual de Wasm en absoluto: simplemente es una biblioteca nativa llamando a otra -- su host -- y tanto el host como el contrato están vinculados como un solo programa, junto con un arnés de pruebas.
Esta configuración se conoce como "modo de pruebas locales" y dado que elimina la máquina virtual Wasm de la experiencia de depuración, tiene muchas ventajas:
-
- Las pruebas se ejecutan mucho más rápido ya que no hay VM interpretándolas y se ejecutarán en paralelo de manera predeterminada en varios hilos.
-
- Las pruebas pueden utilizar numerosas técnicas estándar de pruebas y depuración:
-
- El arnés estándar de Rust
#[test]
, incluyendo soporte de IDE con un solo botón para ejecutar y volver a ejecutar pruebas individuales.
- El arnés estándar de Rust
-
- Depuradores estándar soportados por IDE, incluyendo soporte de IDE para configurar puntos de interrupción e inspeccionar valores tanto en el contrato como en el host.
-
- Depuración ligera a través de logging estándar o tracing.
-
- Pruebas sistemáticas como fuzzing, pruebas de propiedades, o incluso verificación de modelos o verificación formal.
-
- El enfoque más simple de todos para la depuración, imprimir en error estándar.
El modo de pruebas locales es la configuración predeterminada al compilar código dirigido a la CPU y el sistema operativo de tu ordenador local, que es lo que hará cargo si configuras un nuevo proyecto de Rust y no especificas un objetivo.
Modo Wasm
Si, por el contrario, deseas compilar para la implementación, debes decirle a cargo que construya para el objetivo Wasm.
Compilar para Wasm deshabilitará muchas de las instalaciones de depuración descritas anteriormente, típicamente por una de tres razones:
-
- La VM de Wasm simplemente no puede (o la VM que hemos elegido no lo hace) proporcionarlas.
-
- La VM de Wasm podría proporcionarlas, pero hacerlo violaría las restricciones del dialecto de Rust del contrato.
-
- La VM de Wasm podría proporcionarlas, pero hacerlo haría que el código Wasm resultante fuera imprácticamente grande.
Si bien alentamos a que la mayoría de las pruebas se realicen en modo de pruebas locales, algunos problemas obviamente solo surgirán en la implementación y algunas instalaciones de depuración, por lo tanto, permanecen disponibles incluso allí:
-
- Un host "sandbox" con un ledger simulado que puede leer y escribir entradas de ledger
CONTRACT_DATA
en el sistema de archivos local.
- Un host "sandbox" con un ledger simulado que puede leer y escribir entradas de ledger
-
- Un sistema de logging general que permite a los contratos registrar valores del tipo "valor" compartido host/huésped, incluso en producción.
-
- Códigos de
Status
extensibles por el usuario que pueden ser devueltos de cualquier llamada de contrato para indicar problemas.
- Códigos de