Ir para o conteúdo

Depuração

O que é a depuração

A depuração é um processo durante o qual pode detetar e corrigir os erros presentes no seu código.

Qualquer programa .NET pode ser executado em dois modos diferentes.

  • Modo de lançamento - normalmente utilizado em ambientes de produção. Ao utilizá-lo, o .NET ativa várias otimizações do compilador e just-in-time que melhoram a velocidade com que o seu código é executado e reduzem a sua pegada de memória.
  • Modo de depuração - utilizado principalmente em ambientes de desenvolvimento e teste. Todas as otimizações são desativadas e pode anexar depuradores .NET ao seu código.

Ao trabalhar com bibliotecas e aplicações .NET, a depuração implica o seguinte:

  • Executar o seu código em modo de depuração
  • Anexar um depurador .NET ao seu código
  • Definir pontos de interrupção de código para indicar se o fluxo de execução deve ser pausado
  • Seguir o fluxo de execução do código com pausas planeadas nos pontos de interrupção

Definir depuradores .NET

Os depuradores .NET são programas que utilizam APIs de tempo de execução. Estas APIs, por sua vez, permitem controlar o fluxo de execução dos processos .NET. Por outras palavras, podem pausar a execução em determinados pontos de interrupção e armazenar vários estados (incluindo os valores que as variáveis individuais contêm durante estes estados).

Criar algos em modo de depuração

Como discutimos acima, depurar um cBot ou um indicador implica criar esta extensão em modo de depuração. Por predefinição, quando clica no botão Criar na interface do cTrader, a sua extensão é executada em modo de lançamento para ativar as otimizações de código.

Para criar o seu cBot ou indicador em modo de depuração, precisa de utilizar a CLI .NET ou IDEs externos como o Visual Studio. Nesta documentação, mostramos o processo de depuração tal como ocorre no Visual Studio. No entanto, este processo também pode ser replicado noutros IDEs com pequenas alterações.

Instale a versão mais recente do Visual Studio na sua máquina e execute as seguintes ações:

  • Abra o seu indicador ou cBot no Visual Studio selecionando a opção Editar no Visual Studio no menu suspenso Editar em... na parte superior da janela do editor de código.

  • No menu acima do editor de código do Visual Studio, selecione Depurar.

Image title

  • Crie o seu cBot ou indicador em modo de depuração.

Depurar um cBot ou indicador

Agora que sabe como criar um cBot ou indicador em modo de depuração, vamos concentrar-nos em como realmente depurá-lo.

  • Altere os direitos de acesso do seu indicador ou cBot para FullAccess.

  • Anexe um depurador ao processo em execução do seu indicador ou cBot. Pode fazê-lo chamando o método System.Diagnostics.Debugger.Launch().

1
2
3
4
5
6
7
8
9
protected override void OnStart()
{
    var result = System.Diagnostics.Debugger.Launch();

    if (result is false)
    {
        Print("Debugger launch failed");
    }    
}
1
2
3
4
5
6
7
8
9
protected override void Initialize()
{
    var result = System.Diagnostics.Debugger.Launch();

    if (result is false)
    {
        Print("Debugger launch failed");
    }    
}

Nota

O método System.Diagnostics.Debugger.Launch() tem de ser chamado no método OnStart() (para um cBot) ou no método Initialize() (para um indicador).

  • Execute uma nova instância do seu cBot ou indicador. Se já estiver uma instância em execução, selecione-a na interface do utilizador. Deverá ser redirecionado para o Visual Studio com um pedido para selecionar um depurador. Faça-o e clique em OK.

Image title

Assim que a depuração começar, pode definir pontos de interrupção, (entrar em) linhas de código e ver a pilha de chamadas e os valores das variáveis.

Para um guia completo sobre como depurar no Visual Studio, consulte a documentação de depuração do Visual Studio.

Utilizar a diretiva de pré-processador DEBUG

Também pode utilizar a diretiva de pré-processador DEBUG no código do seu cBot ou indicador para controlar o fluxo de execução.

A diretiva #if DEBUG é útil quando pretende executar apenas um bloco ou uma linha de código em modo de depuração.

1
2
3
4
5
6
7
8
9
protected override void OnStart()
{
#if DEBUG
    System.Diagnostics.Debugger.Launch();
    Print("Debugging");
#else
    Print("Not Debugging");
#endif
}

No exemplo acima, a linha de código "Not Debugging" não será compilada se criar o seu cBot em modo de depuração.

Estão disponíveis informações adicionais sobre as diretivas de processador C# nesta documentação.