Histórico da Página
...
O processo de depuração no TDS não é uma exceção, portanto esse documento visa "detalhar" seu funcionamento para que você tenha a melhor experiência possível e saiba identificar melhor possíveis situações.
Portanto, leia com atenção toda essa documentação pois ela poderá ser de grande ajuda.
...
A primeira coisa a ser observada é que o TDS é uma ferramenta do tipo cliente/servidor, ou seja, ela sempre irá requisitar requisitará informações do ao servidor e apenas mostrará o resultado apresentará os resultados para o usuário.
Com isso em mente já da para podemos observar que quem realmente faz a depuração é o servidor, o TDS apenas irá apresentar exibirá as informações enviadas retornadas pelo servidor.
A segunda coisa, é que o TDS é construído em cima da plataforma Eclipse e utiliza o framework de depuração dela para que as informações sejam apresentadas na tela.
Vamos conhecer o fluxo de execução de uma depuração com o TDS.
(Em relação aos processos do servidor, podemos apenas deduzir o que ocorre, portanto as informações aqui referentes a ele são apenas superficiais):
1 - O usuário conecta em -se a um servidor (O qual pode ser local ou remoto)
...
8 - Nesse momento, o servidor está executando a aplicação em modo de depuração, e para isso ele também terá uma série de informações extras que serão processadas.
88.1 - Enquanto o servidor está executando e nenhum ponto de parada foi alcançado, ele envia periodicamente para o TDS uma notificação para que os dois se mantenham conectados e cientes um do outro, e também para que o TDS possa avisar o servidor caso algum ponto de parada foi adicionado, removido ou alterado.
9 - Quando o primeiro ponto de parada é encontrado pelo servidor, ele para a execução e envia a informação para o TDS com o nome e a linha do fonte onde a parada ocorreu.
99.1 - Obs.: Quando o servidor envia para o TDS essa última informação, ele para a execução e fica aguardando instruções do TDS.
10 - O TDS ao receber a notificação de parada, irá requisitar para o servidor todas as informações pertinentes à linha informada, e cada requisição do TDS é uma comunicação com o servidor. Elas são (nessa ordem):
1010.1 - Verifica se houve alguma alteração nos pontos de parada (Adição , e/ou remoção) e em caso positivo informa o servidor. Note que isso é feito em toda oportunidade que o TDS tiver para que o usuário tenha resposta dos pontos de parada modificados o mais rápido possível.
1010.2 - Requisita toda a pilha de execução, montando internamente a estrutura para a plataforma Eclipse.
1010.3 - Apenas para pilha corrente, o TDS requisita a lista com todas as variáveis e seus respectivos valores, montando a estrutura internamente para que a plataforma Eclipse possa apresentá-las
...
10.7.2 - Caso a parada tenha sido por ponto de parada, o TDS confirma que esse ponto de parada existe no registro interno. Em caso positivo, irá notificar a plataforma Eclipse como no item 10.7.1. Caso não seja encontrado, significa que, provavelmente, o usuário removeu o ponto de parada no momento em que o TDS estava processando as informações, portanto ele será marcado para sincronizar com o servidor no momento oportuno.
10.8 - Com a parada identificada e enquanto a plataforma Eclipse atualiza a interface de usuário, o TDS irá sincronizar as informações das tabelas (Caso a opção esteja ligada na visão, senão essa etapa é ignorada). Portanto, caso existam tabelas a serem apresentadas, após o o servidor retornar a lista delas, a estrutura interna será montada e novamente a plataforma Eclipse será notificada. Obs.: Esse processo é feito nesse ponto, para que o usuário tenha uma sensação maior de agilidade, pois ele possui um volume de informação muito alto. Note como ele é feito em paralelo com a atualização da interface.
10.9 - Agora com as informações apresentadas, o TDS fica aguardando o usuário informar qual o próximo passo. Eles podem ser:
10.9.1 - Step Over (F6): Essa opção fará com que o servidor execute a linha corrente, parando na próxima do mesmo fonte. Ou seja, a linha possua a execução de uma função qualquer, todo código dessa função será executado e apenas quando ela retornar o servidor fará a parada.
10.9.2 - Step Into (F5): Ao contrário da opção anterior, caso a linha seja uma chamada de uma função, o servidor irá entrar na mesma e informar a parada na primeira linha dessa função.
10.9.3 - Step Return (F7): Retorna de uma função que foi entrada via Step Into.
10.9.4 - Run To Line (Ctrl+R): Essa opção possui a mesma funcionalidade de um ponto de parada, porém sem a necessidade de criá-lo. O usuário coloca o cursor na linha onde espera que a próxima parada aconteça e aciona essa opção. Na prática, o TDS informa para o servidor que foi criado um ponto de parada naquela linha e manda executar. Quando o servidor retornar para o TDS, este faz todo o processo da parada e remove o ponto de parada da linha.
19.9.5 - Resume (F8): Faz com que a execução continue até que outro ponto de parada seja encontrado ou o programa finalize.
...
Observando apenas o fluxo de execuções, já é possível deduzir algumas boas práticas para que uma depuração seja realizada. Ao longo do tempo, a equipe de desenvolvimento da ferramenta identificou também alguns comportamentos dos usuários que não ajudam o processo como um todo.
A seguir vamos falar um pouco sobre recomendações, boas práticas, o que fazer e o que não fazer, e o que devemos esperar de algumas situações.
1 - Ambiente de depuração:
1.1 - Recomendamos fortemente que a depuração seja feita em ambiente local
...
(1) Quando o TDS estiver aguardando interação com o usuário, o servidor congela a execução da "thread" que esta sendo depurada. Caso a opção de depuração "multi-thread", definida no lançador de depuração, estiver habilitada, todas as "threads" (a corrente, "jobs", "web jobs", conexões de outros SmartCLients e outras) também serão congeladas, independente do ambiente que esta está usando;
(2) NÃO faça depuração em ambientes de produção ou compartilhando o servidor com outros desenvolvedores;
...
1.4 - Garanta que a máquina que está rodando o TDS tenha memória disponível e o processador não esteja em uso pesado. Faça o mesmo para a máquina onde está localizado o servidor (Caso seja um servidor remoto).
2 - Parâmetro -A:
No executor do TDS, existe um campo onde é possível informar parâmetros para o programa a ser executado (-A).
...
Como pode notar, é um problema na função e não existe nada que o TDS possa fazer para contornar.
3 - Procura de fontes:
Como você observou no fluxo, quando o servidor informa ao TDS uma parada, este irá buscar os fontes apenas nos projetos informados na aba "Source Lookup/Origem" do executor.
...
2.3.1 - Esse tipo de situação onera não apenas a depuração, mas o TDS como um todo, então a primeira recomendação é para adicionar na área de trabalho apenas fontes que será serão efetivamente trabalhados.
...
Note que as ações do item 2.3 possuem um grande impacto na performance da depuração.
4 - Ações de execução:
As açõespodem ser: Step Into/Avançar para, Step Over/Ultrapassar, Step Return/Retroceder, Run/Continuar, Termiante/Encerrar.
...
Por exemplo, suponha a seguinte situação hipotética:
- Na linha corrente exista a função: calculeFatura() e nessa função possua um ponto de entrada onde você deve fazer a soma dos itens e retornar para o processo.
- Porém, antes do ponto em que seu fonte é chamado, essa função seleciona uma série de tabelas e executa 2500 linhas.
- O servidor irá fazer um Step Into em cada uma das 2500 linhas executadas (Mandando informação para o TDS em cada uma delas, onde o TDS fará o processo de parada até que o fonte não seja encontrado), e se em uma delas existir outras funções, essas também serão acessadas antes de chegar no seu fonte.
...
Atenciosamente,
Equipe do TDS.
...