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
