Depurador

El depurador muestra el estado del contrato mientras recorre una transacción.

Puede utilizarse en transacciones creadas en Remix o proporcionando el hash de una transacción. Esto último supone que usted dispone del código fuente del contrato o que ha introducido la dirección de un contrato verificado.

Para iniciar una sesión de depuración

  • Haga clic en el botón de depuración en el Terminal cuando aparezca allí una transacción exitosa o fallida. El depurador se activará y ganará el foco en el panel lateral.

  • Active el depurador en el Gestor de complementos y, a continuación, haga clic en el error del panel de iconos. Para iniciar la sesión de depuración, introduzca la dirección de una operación desplegada -mientras tiene el código fuente en el editor y, a continuación, haga clic en el botón Iniciar depuración.

El depurador resaltará el código relevante en el Editor. Si desea volver a editar el código sin que el depurador lo resalte, haga clic en el botón Detener depuración.

Para saber más sobre cómo utilizar esta herramienta vaya a la página Depuración de transacciones.

Esta página repasará la opción Usar fuentes generadas del depurador, su navegación y sus paneles.

Utilizar fuentes generadas

This option is available for contracts using Solidity 0.7.2 or greater. See the solidity blog for more details about generated sources.

Utilizar fuentes generadas facilitará la auditoría de sus contratos. Cuando la opción está marcada, puede entrar en esas salidas del compilador - mientras depura.

Estas salidas del compilador aparecerán en un archivo .yul separado en el editor Remix.

La navegación del depurador

Deslizador y botones

Deslizador

Al mover el control deslizante se resaltará el código correspondiente en el Editor. En el nivel más granular, se desplaza por los opcodes de una transacción (véase la sección de opcodes más abajo). En cada opcode, el estado de la transacción cambia y estos cambios se reflejan en los paneles del depurador.

Paso atrás

Este botón va al opcode anterior. Si el paso anterior implica una llamada a función, no se introducirá la función.

Paso atrás

Este botón retrocede al opcode anterior.

Entre en

Este botón avanza al siguiente opcode. Si la siguiente línea contiene una llamada a una función, Step into entrará en la función.

Paso adelante

Este botón avanza al siguiente opcode. Si el siguiente paso implica una llamada a función, no se introducirá la función.

Saltar al punto de interrupción anterior

Los puntos de ruptura pueden colocarse en el canalón del Editor. Si el paso actual de la llamada ha superado un punto de interrupción, este botón desplazará el control deslizante hasta el punto de interrupción superado más recientemente.

Salte

Cuando esté en una llamada y pulse este botón, el deslizador se desplazará al final de la llamada.

Saltar al siguiente punto de interrupción

Si hay un punto de ruptura por delante en el código, este botón avanzará hasta ese punto.

Los paneles del depurador

Pila de funciones

La pila de funciones enumera las funciones con las que interactúa la transacción.

Locales Solidarios

Las Solidity Locals son las variables locales dentro de una función.

Estado de solidez

Estas son las variables de estado del contrato.

Opcodes

Este panel muestra el número de paso y el código de operación en el que se encuentra actualmente el depurador.

Al arrastrar el deslizador (que está encima de los botones de navegación), el número de paso enfocado y el opcode cambian.

Detalles del paso

Detalles del paso muestra más información sobre el paso opcode.

Pila

Este panel muestra la pila EVM.

Para más información sobre el stack.

Memoria

La memoria se vacía para cada nueva llamada de mensaje. La memoria es lineal y puede direccionarse a nivel de byte. Las lecturas están limitadas a un ancho de 256 bits, mientras que las escrituras pueden tener un ancho de 8 bits o de 256 bits.

El panel Memoria consta de 3 columnas. Puede que necesite hacer el panel lateral de Remix un poco más ancho para que el formato sea correcto. (Arrastre el borde entre el panel principal y el panel lateral hacia la derecha).

La 1ª columna es la ubicación en memoria. La 2ª columna es el valor codificado hexadecimal. La 3ª columna es el valor descodificado. Si no hay nada, aparecerán los signos de interrogación (?) - así:

0x10: 00000000000000000000000000000000 ????????????????

Aquí tiene un ejemplo completo del panel Memoria,

Algunas posiciones de dirección tienen valores codificados en hexadecimal y esos valores se descodifican a continuación. Por ejemplo, compruebe la posición 0xa0 y 0x140.

Almacenamiento

This is the persistent storage.

Pila de llamadas

Todos los cálculos se realizan en una matriz de datos denominada pila de llamadas. Tiene un tamaño máximo de 1024 elementos y contiene palabras de 256 bits.

Datos de llamada

Los datos de la llamada contienen los parámetros de las funciones.

Valor de retorno

Se refiere al valor que devolverá la función.

Cambios en el almacenamiento completo

This shows the persistent storage at the end of the function.

Puntos de interrupción

Se pueden colocar puntos de interrupción en el canalón del Editor para pausar el depurador.

Información adicional

La información granular del depurador ofrece a los usuarios información detallada sobre lo que ocurre en una transacción, por lo que no sólo es bueno para depurar, sino que también es una excelente herramienta de enseñanza.

Para aprender a utilizar el depurador, vaya a Depuración de transacciones.