DevSecOpsARTIGO

IntelliTrace: voltando no tempo com o Visual Studio 2010

Olá, pessoal, como estão?

Nesse artigo vamos falar um pouco sobre um novo recurso desenvolvido pela Microsoft para o Visual Studio 2010 chamado IntelliTrace, que está disponível apenas na versão Ultimate do programa.

O IntelliTrace é uma inovação da Microsoft e é muito interessante. Ela guarda o histórico de tudo que aconteceu no seu sistema, tornando possível recuperar valores, voltar a pontos específicos e muito mais. Seria como se pudéssemos “voltar no tempo” dentro da nossa aplicação; como diria um amigo, estamos “voltando para o futuro” dentro do Visual Studio.

Por exemplo, quando há um bug/defeito para ser resolvido, o desenvolvedor tem que inserir
no código fonte uma série de “break points”, reexecutar o código fonte anotando
valores de variáveis, criando um mapa sobre quais métodos chamam outros métodos,
parâmetros passados de um método para outro, enfim, tudo isso consome muito tempo, pois é preciso pesquisar as razões pelas quais um problema ocorreu. Com o
IntelliTrace, todo esse trabalho, que acaba consumindo mais tmepo que a correção propriamente dita, é deixado de lado,
pois todo o histórico de chamadas, variáveis etc. fica registrado.

Além disso tudo, a ferramenta é única: não existe (ao menos eu não conheço)
nenhuma ferramenta, gratuita ou paga em JavaJava42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) , que faça o que a gente faz
com o IntelliTrace.

Mas vamos à prática que a coisa fica melhor, não é mesmo?

Em primeiro lugar, é preciso ver se o IntelliTrace está habilitado. Você pode verificar isso indo no menu Tools-> Options

Teremos a seguinte tela:

Aqui temos duas opções para o uso de IntelliTrace. Na primeira opção, o recurso irá coletar informações sobre os eventos, e na segunda, além disso, coleta também chamadas realizadas pelo debug. A segunda opção pode afetar um pouco o desempenho da sua aplicação, como você pode ler na imagem. Eu sugiro que você marque a segunda a opção, mas, fica a seu critério.

Existem outras opções interessantes no menu IntelliTrace, como que tipo de eventos ele vai analisar, por exemplo.

Agora vamos à parte boa, os códigos!

Primeiro vamos criar nosso projeto. Vá até o menu Fie-> New-> Project-> Visual C#-> Windows-> Console Application:

Vamos chamar nossa aplicação de JogandoDados. A idéia é simples, dois jogadores lançam um dado cada um e o sistema verifica quem ganhou a disputa.

Depois de criado o projeto o nosso código deverá estar assim:

namespace JogandoDados<br />{<br />    class Program<br />    {<br />        static void Main(string[] args)<br />        {<br />            var jogador1 = new Jogador();<br />            var jogador2 = new Jogador();<br /><br />            jogador1.nome = "José";<br />            jogador2.nome = "João";<br /><br />            jogador1.lancarDado();<br />            jogador2.lancarDado();<br /><br />            Console.WriteLine(jogador1.nome + " obteve o número " + jogador1.getValorDado() + " ao lançar o dado.");<br />            Console.WriteLine(jogador2.nome + " obteve o número " + jogador2.getValorDado() + " ao lançar o dado.");<br />            Console.WriteLine("");<br />            Console.WriteLine("*****************Resultado****************");<br />            Console.WriteLine("");<br /><br />            if (jogador1.getValorDado() > jogador2.getValorDado())<br />            {<br />                System.Console.WriteLine(jogador1.nome + " venceu!");<br />            }<br />            else if (jogador1.getValorDado() < jogador2.getValorDado())<br />            {<br />                System.Console.WriteLine(jogador2.nome + " venceu!");<br />            }<br />            else<br />            {<br />                System.Console.WriteLine("Não houve vencedor, a partida terminou empatada!");<br />            }<br /><br />            Console.Read();<br />        }<br />    }<br /><br />    class Jogador<br />    {<br />        public string nome { get; set; }<br />        private int valorDado;<br /><br />        public int getValorDado() <br />        {<br />            return valorDado;<br />        }<br /><br />        public void lancarDado()<br />        {<br />            valorDado = new Random().Next(1, 6);<br />        }<br />    }<br />}

Como vocês podem ver é um código simples, mas eu gostaria de ressaltar alguns detalhes:

  1. Notem que a variável nome tem as funções get e set definidas para ela, por isso o uso do “{ get; set; }”; acontece de forma diferente com o valor do dado lançado pelo jogador, que será atribuído a partir do método lancarDado, por isso não devemos deixar que o valor seja atribuído fora da classe.
  2. Para esse nosso exemplo, o uso do random vai ser de grande utilidade. Isto porque o random muda de valor sempre que passamos por ele e veremos que com o IntelliTrace poderemos recuperar qualquer valor lançado por ele de maneira simples. Sem o IntelliTrace, mesmo que voltemos a nossa linha de debug (“aquela linha amarela”) para onde está o random, o valor retornado por ele sempre seria diferente.

Agora, vamos ver o IntelliTrace em ação.

Primeiro setamos um breakpoint no nosso código:

Perceba que uma nova barra de botões é criada, que é a do IntelliTrace. Nela podemos avançar ou voltar os eventos e chamadas do registradas pelo IntelliTrace.

Veja também que uma nova janela aparecerá; ela contém informações sobre o IntelliTrace.

Bem, vamos debugar nosso código até conseguirmos lançar os dois dados. A janela no IntelliTrace ficará assim:

Aí estão todos passos que fizemos até agora. É o nosso histórico. Note que na parte superior tem a seguinte informação “Switch to Call View”; clicando lá, teremos a seguinte visão dessa mesma janela:

São nossos passos vistos de uma maneira mais detalhada. Clicando sobre cada “passo” o IntelliTrace põe o cursor na respectiva linha e com o valor atribuído no momento em que o evento foi executado.

Para dar um molho a mais no nosso exemplo, vamos voltar à linha do debug onde atribuímos o nome do jogador.

Fazendo um novo debug você verá que o IntelliTrace guardará as informações coletadas sem perder as informações obtidas no debug anterior, podemos ver isso na foto abaixo:

Com isso podemos “voltar no tempo” e obter os valores obtidos em qualquer tempo. Muito legal, não é?

Essa é uma maneira nova e eficiente de debugar nossas aplicações e, se usada com sabedoria, pode ajudar a aumentar a nossa produtividade e a qualidade nos nossos códigos.

Gostou do Intellitrace? Espero que, se você ainda não usava a ferramente, tenha se interessado e comece a fazer seus testes. Lembre-se que ela só está disponível na versão Ultimate do Visual Studio 2010.

Um abraço a todos e até o próximo artigo.

Formado em Análise de Sistemas pela Unibratec (PE) e Pós Graduado em Gerenciamento Ágil de Projetos pelo C.E.S.A.R. Edu (PE). Atualmente trabalha como Analista de Projetos na CSU CardSystem.

Ver perfil