No primeiro artigo sobre debug com o Visual Studio 2010, mostrei como fixar itens de debug, colocar comentários e ver os valores anteriores dos objetos fixados mesmo sem executar o programar.
Hoje vou falar de outro recurso sensacional chamado IntelliTrace.
Eu gosto de comparar o IntelliTrace com a janela History do Photoshop, isso mesmo, Photoshop. Mesmo para quem não conhece ou nunca viu essa janela, a idéia dela é salvar tudo que o usuário faz, desenhar algo, apagar, mover de lugar, e facilmente podemos voltar o que estivermos fazendo no Photoshop clicando nos eventos gravados, o IntelliTrace faz o mesmo com o nosso debug, ele gera um histórico de tudo que acontece durante a execução do sistema, e conseguimos voltar a pontos específicos, recuperar valores, ver chamadas de eventos, e muito mais.
Antes de começar um pequeno detalhe, o IntelliTrace está disponível somente no Visual Studio 2010 Ultimate então infelizmente se não possui a versão Ultimate não terá acesso ao IntelliTrace.
Primeiramente vamos ver as opções de configuração do IntelliTrace, no menu Tools/Options agora temos novas opções de configuração do Visual Studio e o IntelliTrace tem configurações específicas.
Por padrão o primeiro RadioButton vem selecionado, ou seja o IntelliTrace só vai coletar informações sobre os eventos, e como podem ver na tela, não afeta o desempenho na hora do debug.
Eu marco o segundo RadioButton, onde além dos eventos ele coleta as chamadas realizadas também durante o debug, mas pode afetar um pouco o desempenho durante o debug, confesso que nunca tive problemas com desempenho utilizando o recurso.
Outro detalhe importante que marquei na imagem, é que o recurso de Edit and Continue que permite alterar um código com o programa executando e continuar o debug é desabilitado.
Outra opção de configuração interessante no IntelliTrace é escolher quais eventos ele vai analisar.
A quantidade de opções é enorme, não vou listar as sub-opções mas as opções principais que podemos selecionar são.
- ADO.NET
- ASP.NET
- Console
- Data Binding
- Enviroment Variables
- File
- Gesture
- Lazy Initialization
- Registry
- ServiceModel
- Threading
- Tracing
- User Prompt
- Workflow
- XML
Agora vamos começar a brincadeira de verdade, vamos imaginar o seguinte bloco de código, que é o mesmo do antigo anterior com alguns acréscimos.
class Program
{
static void Main(string[] args)
{
var cliente = new Cliente();
cliente.Nome = "Márcio";
cliente.Idade = 26;
cliente.DescobrirMetadeDaIdade();
cliente.Nome = "Márcio Fábio Althmann";
cliente.Idade = new Random().Next(1, 99);
cliente.Idade = new Random().Next(1, 50) / 3;
}
}
class Cliente
{
public string Nome { get; set; }
public int Idade { get; set; }
public int MetadeIdade { get; set; }
public void DescobrirMetadeDaIdade()
{
if (Idade <= 0)
return;
MetadeIdade = Idade/2;
}
}
O código acima é simples, mas as duas últimas linhas onde utilizamos um Random para obter a idade é onde veremos como o IntelliTrace é interessante, quando estamos depurando algo no Visual Studio conseguimos sem problemas clicar na seta amarela que indica em qual linha estamos no momento, e arrastar a mesma para cima, e voltar o debug, mas no caso do Random isso não vai ajudar, por que quando passarmos novamente pela linha o Random será executado novamente.
Com o IntelliTrace poderemos voltar até as linhas do Random que o valor gravado não será trocado, afinal ele tem um “histórico” da execução.
Para utilizar o IntelliTrace é simples, colocamos um breakpoint e executamos o programa, quando a execução parar no breakpoint veremos algumas mudanças no Visual Studio. A primeira mudança é que ao lado da barra esquerda onde fica a marcação do breakpoint, uma nova barra é criada com botões do IntelliTrace, onde poderemos avançar e voltar os eventos ou chamadas registrados pelo IntelliTrace.
O Visual Studio também ganha uma janela nova também chamada IntelliTrace veja abaixo a janela mostrando o histórico de eventos da depuração, que é a mais simples, mas com ela também conseguimos “voltar no tempo” no nosso aplicativo (emprestei do Spoky esse termo :) ).
Nessa mesma janela podemos clicar no item Switch to Calls View que mostra de uma forma detalhado o que aconteceu com o aplicativo.
E conforme vamos navegando na lista de chamadas da janela, no editor de código o breakpoint volta ou avança na linha informada no histórico. Lembrando que poderemos voltar para a linha do Random e o valor não será modificado.
Eu iria gravar um pequeno vídeo mostrando o IntelliTrace funcionando, mas como o Spoky fez um vídeo sobre o assunto para a Copa Microsoft, clique aqui e veja o IntelliTrace funcionando, e se preparem para rir muito durante o vídeo, ficou muito bom ;) .
Abraços e até o próximo post.



