Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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.

...