SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
30.11.2024

Aula 187: Usando o Depurador Remix

O Remix IDE é uma ferramenta poderosa para desenvolvedores Solidity, e uma de suas características mais importantes é o depurador integrado. Esta aula abordará como usar o depurador do Remix de forma eficaz para solucionar problemas e analisar seus contratos inteligentes.

Começando com o Depurador Remix

Antes de mergulharmos nos detalhes de como usar o depurador, certifique-se de que você tenha acesso ao Remix IDE. Você pode encontrá-lo em Remix Ethereum IDE.

Etapa 1: Escreva um Contrato Inteligente Simples

Para fins de demonstração, vamos escrever um contrato inteligente simples que inclui uma função com um bug. Assim, poderemos usar o depurador para identificar e corrigir o problema.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Contador {
    uint256 public contagem;

    function incrementar() public {
        contagem += 1;
    }

    function decrementar() public {
        contagem -= 1;  // Isso causará um problema se a contagem for 0
    }
}

Etapa 2: Compile o Contrato

No Remix, navegue até a aba “Compilador Solidity”, selecione a versão correta do compilador (por exemplo, 0.8.0) e compile o contrato. Certifique-se de que não haja erros na compilação.

Etapa 3: Implemente o Contrato

Vá para a aba “Implantar e Executar Transações”. Selecione o ambiente (por exemplo, JavaScript VM) e implemente o contrato Contador. Uma vez implantado, você pode ver o contrato implantado na seção “Contratos Implantados”.

Etapa 4: Usar o Depurador Remix

Agora que temos um contrato implantado, vamos usar o Depurador Remix:

  1. Executar uma Transação: Chame a função decrementar. Como a contagem inicial é zero, isso causará um subfluxo. Essa transação falhará.
  2. Abrir o Depurador: Assim que a transação falhar, você verá um quadrado vermelho onde está o hash da transação. Clique nele para abrir o depurador.

Etapa 5: Analisando com o Depurador

Após clicar na transação falhada, o depurador abrirá mostrando diferentes visualizações e dados relevantes à transação, como:

  • Pilha de Chamadas: Isso mostrará a pilha de funções que foram chamadas antes da falha da transação.
  • Painel de Depuração: Esta área exibe o estado atual das variáveis locais, armazenamento e memória.
  • Controles de Passo: Use esses controles para avançar na execução do código linha por linha.

Exemplo de Depuração

Ao chegar à função decrementar na pilha, você pode ver que o problema surge ao tentar subtrair 1 de contagem, que atualmente é 0.

Modificando o Contrato

Para corrigir o problema, podemos adicionar uma declaração require para evitar subfluxos.

function decrementar() public {
    require(contagem > 0, "A contagem não pode ser negativa");
    contagem -= 1;
}

Etapa 6: Reimplemente e Teste Novamente

Após fazer alterações no seu contrato, recompile-o, implemente-o novamente e chame a função incrementar seguida da função decrementar. Desta vez, as funções devem funcionar conforme esperado, sem apresentar nenhum erro.

Melhores Práticas ao Usar o Depurador

  • Entenda a Pilha de Chamadas: Saber quais funções foram chamadas antes de um erro pode ajudar a identificar problemas.
  • Inspecione Variáveis de Estado: Sempre examine os valores das suas variáveis de estado em vários pontos de execução.
  • Use Declarações Require: Proteja suas funções utilizando declarações require para validar entradas e evitar estados indesejados.

Conclusão

O depurador Remix é uma ferramenta inestimável para desenvolvedores Solidity. Ele permite que você avance através das transações, inspecione o estado e diagnostique problemas dentro dos seus contratos inteligentes. Seguindo os passos apontados nesta aula, você aprimorará suas habilidades de depuração e contribuirá para a criação de contratos inteligentes mais robustos. Feliz programação!

Com esses insights em mãos, você pode agora usar o Depurador Remix com confiança em seu fluxo de desenvolvimento Solidity.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!