Um "trace" bastante simples de implementar
Enviado: 26 Mar 2015 23:50
Muitas vezes vemos aqui colegas "penando" para descobrir o que estão fazendo de errado, porque determinado cálculo não chega ao esperado, como o programa está se comportando, por onde passam as rotinas, dentro das
diversas opções motivadas pelos,
IF
..
ENDIF
FOR
...
NEXT
DO WHILE
...
ENDDO
Sendo assim, bolei uma estrutura super simples, usando apenas a função AADD do Clipper, criando uma matriz com todos os valores assumidos pelas variaveis do sistema, inclusive com os os nomes das PROCEDURES e FUNCTIONS, com as linhas onde estão sendo executadas as operações. Este processo é bem melhor do que compilar com /B e usar a LIB CLD, não segura em nada o processamento em programas pesados e é fácil de implementar
e depois desativar.
Pode-se por qualquer tipo de variável (alfa, numérica, matriz, etc., desde que devidamente onvertida para string, para ser adicionada ao label que a identifica.
Quando tiver resolvido todos os problemas, basta apenas desativar o bloco final onde está a apresentação por ACHOICE de tudo o que foi obtido no processamento.
Enquando houver dúvida sobre algum processo, inclua outras linhas com o AADD até ter certeza de que descobriu todos os seus erros, pois o computador nunca erra...
diversas opções motivadas pelos,
IF
..
ENDIF
FOR
...
NEXT
DO WHILE
...
ENDDO
Sendo assim, bolei uma estrutura super simples, usando apenas a função AADD do Clipper, criando uma matriz com todos os valores assumidos pelas variaveis do sistema, inclusive com os os nomes das PROCEDURES e FUNCTIONS, com as linhas onde estão sendo executadas as operações. Este processo é bem melhor do que compilar com /B e usar a LIB CLD, não segura em nada o processamento em programas pesados e é fácil de implementar
e depois desativar.
Pode-se por qualquer tipo de variável (alfa, numérica, matriz, etc., desde que devidamente onvertida para string, para ser adicionada ao label que a identifica.
Quando tiver resolvido todos os problemas, basta apenas desativar o bloco final onde está a apresentação por ACHOICE de tudo o que foi obtido no processamento.
Enquando houver dúvida sobre algum processo, inclua outras linhas com o AADD até ter certeza de que descobriu todos os seus erros, pois o computador nunca erra...
Código: Selecionar todos
Ccolocar esta linha no inicio do sistema ou da rotina que vai ser rastreada
private matr_tr := {}
// pode ir colocando essas linhas nos pontos onde deseja ver o conteudo de variaveis
// como as variaveis devem ser convertidas para string veja qual a natureza do
// dado na rotina, se e, numerico, alfanumerico e faca a conversao quando adiciona-lo
// na matriz
aadd(matr_tr,("Procedure/Fun‡Æo: " + procname()))
aadd(matr_tr,("Linha: " + str(procline(),3) ) )
aadd(matr_tr,("Wquadra: " + wquadra ) )
....
aadd(matr_tr,("Recno quadra: " + str(recno(),5) ) )
aadd(matr_tr,("Qua numero : " + qua_numero ) )
aadd(matr_tr,("Wquadra ini : " + str(wquadini,3) ) )
aadd(matr_tr,("Wquadra fim : " + str(wquadfim,3) ) )
....
aadd(matr_tr,("Ntotal : " + str(ntotal,3) ) )
aadd(matr_tr,("Nmetade : " + str(nmetade,3) ) )
aadd(matr_tr,("Nposmetade : " + str(nposmetade,3) ) )
aadd(matr_tr,("Procedure/Fun‡Æo: " + procname()))
aadd(matr_tr,("Linha: " + str(procline(),3) ) )
aadd(matr_tr,("Ntotal := " + str(ntotal,5) ))
// quando tiver terminado apresente o conteúdo da matriz que terá todos os valores
// assumidos, inclusive as linhas pode onde passou
xtel_trace := savescreen()
@ 0,0 clear to 23,79
@ 0,0 to 23,79 double
nada := achoice(1,1,22,79,matr_tr)
restscreen(,,,,xtel_trace)
matr_tr := {} // limpa novamente a matriz para poder reiniciar do zero