Partilhar via


Inspecione seu aplicativo com a depuração histórica do IntelliTrace no Visual Studio (C#, Visual Basic, C++)

Você pode usar a depuração histórica para ir para trás e para frente ao longo da execução do aplicativo e inspecionar o estado dele.

Você pode usar o IntelliTrace na edição Visual Studio Enterprise, mas não nas edições Professional ou Community.

Vamos começar com um programa simples que tem um bug. Em um aplicativo de console C#, adicione o seguinte código:

static void Main(string[] args)
{
    int testInt = 0;
    int resultInt = AddIterative(testInt);
    Console.WriteLine(resultInt);
}
private static int AddIterative(int j)
{
    for (int i = 0; i < 20; i++)
    {
        j = AddInt(j);
    }
    return j;
}

private static int AddInt(int add)
{
    if (add == 10)
    {
        return add += 25;
    }
    return ++add;
}

Vamos supor que o valor esperado de resultInt após chamar AddIterative() seja 20 (o resultado de incrementar testInt 20 vezes). (Também vamos supor que você não possa ver o bug em AddInt()). Mas o resultado é, na verdade, 44. Como podemos encontrar o bug sem percorrer AddIterative() 10 vezes? Podemos usar a depuração histórica para localizar o bug com mais rapidez e facilidade. Este é o procedimento:

  1. Em Ferramentas > Opções > IntelliTrace > Geral, verifique se o IntelliTrace está habilitado e selecione Eventos do IntelliTrace e informações de chamada. Se você não selecionar essa opção, não poderá ver a medianiz de navegação (conforme explicado abaixo).

  2. Defina um ponto de interrupção na linha Console.WriteLine(resultInt);.

  3. Inicie a depuração. O código é executado até o ponto de interrupção. Na janela Locais, você pode ver que o valor de resultInt é 44.

  4. Abra a janela Ferramentas de Diagnóstico (Depurar > Mostrar Ferramentas de Diagnóstico). A janela de código deve se parecer com esta:

    Code window at the breakpoint

  5. Você deverá ver uma seta dupla ao lado da margem esquerda, logo acima do ponto de interrupção. Essa área é chamada de medianiz de navegação e é usada para depuração histórica. Clique na seta.

    Na janela de código, você deve ver que a linha de código anterior (int resultInt = AddIterative(testInt);) é cor de rosa. Acima da janela, você verá uma mensagem informando que agora está na depuração histórica.

    A janela de código tem esta aparência:

    code window in historical debugging mode

  6. Agora você pode intervir no método AddIterative() (F11 ou o botão Intervir na medianiz de navegação). Continue (F10 ou Ir para Próxima Chamada na medianiz de navegação). A linha rosa agora está na linha j = AddInt(j);. Nesse caso, F10 não vai para a próxima linha de código. Em vez disso, vai para a próxima chamada de função. A depuração histórica navega de chamada para chamada e ignora linhas de código que não incluem uma chamada de função.

  7. Agora, intervenha no método AddInt(). Você verá o bug nesse código imediatamente.

Este procedimento descreveu apenas o básico do que você pode fazer com a depuração histórica.