Visualizando o conteúdo da Datawindow/Datastore durante o debug

Depois do último post, fiquei com a sensação de que eu precisava criar algo mais útil. Então resolvi fazer este post com algumas formas de facilitar a visualização do conteúdo de uma Datawindow (ou Datastore) durante o processo de debug.

Existem duas formas de fazermos isso:

A primeira é adicionando um item para o Watch com a seguinte expressão:

dw_1.object.datawindow.data

Esta expressão no watch vai te mostrar o conteúdo da datawindow ou datastore, mas em um formato meio difícil de ler e nada amigável. Lembre-se de trocar dw_1 para o nome do seu controle datawindow/datastore.

 

A segunda forma também envolve incluir um item no watch, mas com uma expressão diferente:

dw_1.saveas("c:\caminho\completo\para\o_arquivo.txt", Text!, true)

Desta forma, a cada step, o arquivo será atualizado (sobrescrito) com os dados atuais. Vale lembrar que, se o volume de dados for muito grande, este procedimento vai deixar as coisas mais lentas.

Nesta expressão, o formato texto (Text!) foi escolhido por uma razão: facilidade de acompanhar as modificações. Se você utilizar o Notepad++, basta ativar a função tail (ou utilizar o script que fiz utilizando o PowerShell) e você conseguirá acompanhar o arquivo na medida em que ele é atualizado.

Se o volume de dados for muito grande, talvez seja mais produto incluir no fonte (apenas para debug) a expressão que utilizamos na segunda forma e mudar a saída para Excel (Excel!). Desta forma, nos pontos chave do fonte, você conseguirá extrair um espelho de como a dw/ds estava em determinado momento.

Você pode, inclusive, gerar vários destes ‘espelhos’ com uma implementação simples, conforme exemplo abaixo:

  • Crie as seguintes variáveis de instancia (ou globais, se for o caso):
string is_nomeArquivo = "c:\caminho\completo\para\dw_1_debug_"
string is_ext = ".xls"
long il_qtd = 0

 

  • No ponto do sistema que você quiser gerar este ‘espelho’, utilize o fonte abaixo:
il_qtd ++
dw_1.saveas(is_nomeArquivo + string(il_qtd, "00") + is_ext, Excel!, true)

 

Desta forma, cada vez que você chamar esta função, vai gerar um arquivo diferente e poderá analisá-los separadamente para tentar localizar o problema. Inclusive, se preferir, pode encapsular esta chamada em uma função e deixar o código mais limpo.

 

Espero ter ajudado.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, PowerBuilder and tagged , , , , , , , , .