Clipper On Line • Ver Tópico - Rotina de ErrorLog

Rotina de ErrorLog

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Rotina de ErrorLog

Mensagempor JoséQuintas » 29 Mar 2017 01:51

De novo esqueci de algo:
Estamos no fórum de MINIGUI.

No caso da MINIGUI, ela não tem console, então se a errorsys fizer uso de tela, pode não funcionar.
Uma opção interessante seria usar GTWVG na errorsys.
O programa continuaria GUI, e se necessário, teria tela estilo console pra uma errorsys padrão.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Rotina de ErrorLog

Mensagempor cjp » 29 Mar 2017 23:27

Achei muito interessante tua experiência. No meu caso, eu prefiro que as informações do erro venham no meu e-mail, e o usuário é apenas informado de que houve um erro e que ele será corrigido em seguida.

Fiquei curioso especialmente com a parte em que vc diz que o usuário atualiza o sistema quando e se quiser. Isso não causa problema? Eu prefiro forçar a atualização, que é feita automaticamente, mantendo o sistema atualizado em todos os usuários. Nem sempre consigo, mas, quando acontece de o sistema não ser atualizado por muito tempo, eu intervenho.

A propósito, como vc faz atualização do teu sistema? Eu tenho feito assim: compilo, compacto o .exe com o rar.exe. Daí envio o arquivo .rar para os usuários por meio do FTP. O sistema baixa o .rar no computador do usuário. Daí, na próxima inicialização do sistema, no .bat que inicializa o sistema, dou um rar e .exe para descompactar, abrindo já a versão atualizada.

Entretanto, tenho enfrentado alguns problemas com isso: 1) frequentemente, o .rar some no meio do caminho; ainda não descobri como isso acontece, mas aparentemente é o meu próprio sistema que está apagando ele, não sei porque; 2) às vezes o usuário cancela o recebimento do .rar, mesmo com todas as recomendações para não fazer isso; 3) às vezes o rar.exe não descompacta o .rar, não sei porque. E por isso, às vezes acontece de o sistema não ser atualizado por vários dias em algum usuário.

Será que vc poderia me indicar uma forma melhor de fazer a atualização?

Respondendo às tuas perguntas sobre o errorlog:

1) Sim, tenho usado vários begin sequence; inicialmente tinha poucos, mas, quando o meu errorsys passou a não funcionar mais, tive que ir colocando begin sequence em cada ponto em que dava erro, pois só assim eu consigo obter as informações do erro;

2) Não uso nenhuma lib gráfica; pelo menos não conscientemente; só se algumas das libs que eu use para outros fins seja também lib gráfica. Por via das dúvidas, listo aqui todas as libs usadas:

-lxhb
-lhbwin
-lhbtip
-lhbct
-lhbHPdf
-lhbZebra
-lhbmisc
-llibmysql
rddsql.hbc
sddodbc.hbc
hbwin.hbc


3) Não uso try / catch; nem sei o que é isso.

4) Como usar GTWVG apenas para a errorsys?

5) Não entendi esta tua frase:

O programa continuaria GUI, e se necessário, teria tela estilo console pra uma errorsys padrão.


6) Por fim, já que estamos no fórum da Minigui, tenho muito interesse em aprender a usá-la. Existe algum jeito simples de começar? Tem algum manual?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Rotina de ErrorLog

Mensagempor JoséQuintas » 30 Mar 2017 02:31

Você usa só console mesmo, não precisa gtwvg na errorsys.
O arquivo xhb.hbc é de compatibilidade com xHarbour, não sei se ele interfere na errorsys, já que ele tem outra.

Minha atualizacão é simples: baixo o EXE com um nome temporário, testo tamanho/crc32, se tudo ok, renomeio pra EXE pra entrar no lugar do outro.
É assim desde os tempos do Clipper.

Sobre o aplicativo...
Não quer que o usuário veja o erro, ok?
Altere a errorsys para apenas gravar em disco, só informando para o usuário que aconteceu erro.
Pra isso, não precisa de nenhum BEGIN SEQUENCE dentro do aplicativo.
Pra que complicar se pode facilitar....

E nada de mandar email pela errorsys.
Manda depois, o arquivo gravado em disco.

if file( "erro.log")
   MandaEmail()
endif
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Rotina de ErrorLog

Mensagempor cjp » 31 Mar 2017 00:52

O arquivo xhb.hbc é de compatibilidade com xHarbour, não sei se ele interfere na errorsys, já que ele tem outra.


Tirei a xhb.hbc (tinha uma chamada ao hbwin.ch numa função, mas aparentemente ela não era necessária, pois eu a tirei e continuou funcionando tudo), mas não adiantou tirar, pois continua fechando direto quando dá erro.

Minha atualizacão é simples: baixo o EXE com um nome temporário, testo tamanho/crc32, se tudo ok, renomeio pra EXE pra entrar no lugar do outro.
É assim desde os tempos do Clipper.


Algumas dúvidas:

1) vc baixa de onde? FTP também? Usando o oFtp também?
2) meu ftp não aceita arquivos EXE; o teu aceita?
3) como vc baixa com um nome temporário?
4) o que é crc32?
5) como vc renomeia para o EXE se o EXE está em uso?

Altere a errorsys para apenas gravar em disco, só informando para o usuário que aconteceu erro.
E nada de mandar email pela errorsys.
Manda depois, o arquivo gravado em disco.


Na verdade já é praticamente isso que eu faço, com a única diferença que mando o e-mail na hora. Posso alterar para enviar depois, mas se o erro for grave a ponto de o sistema não abrir mais, o erro não será enviado.

Mas por que enviar o e-mail na hora é problema?

Pra isso, não precisa de nenhum BEGIN SEQUENCE dentro do aplicativo.
Pra que complicar se pode facilitar....


Como te disse, só passei a usar mais o begin sequence quando o meu errorsys parou de funcionar.

Por favor, preciso da tua ajuda para que meu errorsys volte a funcionar.

Como te disse, já testei ele, o erro não está nele; ele está funcionando.

Imagino que o erro esteja no meu sistema, pois nenhum errorsys funciona nele, nem o meu, nem o teu, nem o do próprio Harbour.

Mas como achar o erro? Não sei nem por onde começar.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Rotina de ErrorLog

Mensagempor JoséQuintas » 31 Mar 2017 04:01

Na pasta não tem um hb_out.log?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Rotina de ErrorLog

Mensagempor cjp » 31 Mar 2017 17:34

Não tem, nem isso ele está fazendo.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Rotina de ErrorLog

Mensagempor JoséQuintas » 31 Mar 2017 18:55

O hb_out.log é de uso também do Harbour.
Se fosse algum erro interno, seria gravado no hb_out.log independente da errorsys.

Complicado isso.

Poderia existir recursividade? uma funcão chamando ela mesma infinitamente?

Pesquisou em todos os fontes do aplicativo, via editor de texto, por BEGIN SEQUENCE?
E fontes que possam vir de bibliotecas suas?

Tem algum controle seu que faz QUIT?
De repente colocou validade no aplicativo e esqueceu.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Rotina de ErrorLog

Mensagempor cjp » 31 Mar 2017 19:25

Eu só raramente uso QUIT, acho que nesse sistema não tem nenhum.

Em princípio, não tem recursividade não, pois ele está funcionando normalmente.

Eu provoquei o erro bem no início do sistema, para justamente não ter a influência de nenhum begin sequence, nem de qualquer outra coisa.

Fiz agora o seguinte teste:

#require "rddsql"
#require "sddodbc"
#include "dbinfo.ch"
   
//   REQUEST SQLMIX, SDDODBC, DBFNTX
#include "inkey.ch"
#include "hbgtinfo.ch"
//         #include "dbinfo.ch"
         #define RDDI_CONNECT     1001
         #define RDDI_DISCONNECT   1002
         #define RDDI_EXECUTE     1003
         REQUEST SQLMIX, SDDODBC, DBFNTX
         ANNOUNCE RDDSYS

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850

*REQUEST HB_Codepage_PTISO

PROCEDURE Main
* Set( _SET_CODEPAGE, "PTISO" )
*Hb_GtInfo( HB_GTI_COMPATBUFFER, .F. )
         RDDSETDEFAULT("DBFNTX")
         HB_SETCODEPAGE('PT850')
         HB_LANGSELECT('PT')

      

         public usooff :="N"
       public jaculto :="N"
       cls
         public us :="I"
         dt=date()
         hr=time()

SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE ) // + HB_INKEY_GTEVENT )      



SET COLOR TO W/B,b/w
do case
   case file("c:\windows\noteb.cpd")
        setmode(37,105)
   case file("c:\wsoft\install\cacic\modulos\colanvi\lixo\inforum.cpd") .or. file("c:\lixo\inprom.cpd")
        setmode(45,125)
   otherwise
        setmode(42,110)
endcase
vers="29/07/15"

?aaa

function ANSI(cTxt) // 1 texto a ser convertido para o padrÃ’o ANSI

local I
local aTab
local nCod

aTab:= {;
199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,;
201,230,198,244,246,242,251,249,255,214,220,248,163,216,215,131,;
225,237,243,250,241,209,170,176,191,174,172,189,188,161,171,187,;
35, 35, 35,124, 43,193,194,192,169, 43,124, 43, 43,162,165, 43,;
43, 43, 43, 43, 45, 43,227,195, 43, 43, 43, 43, 43, 61, 43,164,;
240,208,202,203,200,185,205,206,207, 43, 43, 35, 35,166,204, 35,;
211,223,212,210,245,213,181,254,222,218,219,217,253,221,175,180,;
173,177, 61,190,182,167,247,184,186,168,183,185,179,178, 35, 32 }

for I:= 1 to Len(cTxt)
nCod:= ASC(SubStr(cTxt,I,1))

if nCod >= 128
cTxt:= Stuff(cTxt,I,1,Chr(aTab[nCod -127]))
endif
next
return cTxt


Tirei tudo que uso, deixei só as configurações iniciais e o que é necessário para o errorsys funcionar.

Daí funcionou, o erro tá na linha 55: ?aaa. E chamou corretamente a errorsys e me informou do erro.

Mas dentro do meu sistema não funciona. E o pior é que eu não faço ideia de como começar a procurar.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Rotina de ErrorLog

Mensagempor cjp » 31 Mar 2017 20:13

Fiz agora outro teste: fui incluindo na compilação deste teste, um de cada vez, todos os prgs que eu uso no meu sistema. Não há chamadas a eles no teste.prg, mas apenas incluí na compilação, um a um, para ver se fecharia direto depois da inclusão de qualquer deles.

Resultado: de novo funcionou. Deu erro na linha 55 do teste.prg, como era pra dar mesmo, e chamou a errorsys e me avisou.

Daí eu fui incluindo as libs, também uma a uma. Também não ocorreu o problema (fechar direto) nenhuma vez, sempre chamou a errorsys e me avisou.

Minha última tentativa foi compilar direto o meu sistema, da mesma forma como estava compilando direto o teste (só mudei teste.prg para tagenda.prg), sem usar o .hbp. Também não funcionou, continua fechando direto.

Alguma sugestão de teste mais?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Rotina de ErrorLog

Mensagempor JoséQuintas » 31 Mar 2017 22:01

Explique melhor esse fechar direto.
Está usando e fecha, ou nem carrega, ou é durante o uso...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Rotina de ErrorLog

Mensagempor cjp » 31 Mar 2017 22:07

Estou usando, e fecha na hora que dá o erro. Ao invés de executar a errorsys, ele simplesmente fecha.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Rotina de ErrorLog

Mensagempor JoséQuintas » 01 Abr 2017 10:08

Tem várias versões de Harbour na máquina? Poderia estar misturando versões?

Talvez seja interessante baixar uma versão atualizada do Harbour pra ter certeza de que não é problema no seu Harbour.

Vi LIBs que não costumo usar, como por exemplo pra MySql.
Faz uso delas?
Elas dependem de DLLs compatíveis. Tem as versões corretas instaladas?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Rotina de ErrorLog

Mensagempor cjp » 08 Abr 2017 03:59

Desculpe a demora em responder, mas ando muito ocupado.

Sim, tenho 3 versões do Xharbour instaladas, mas só uso uma.

De onde posso baixar a versão atualizada?

Uso sim a MySQL. Quanto às DLLs, não sei dizer. Como faço para saber?

Vi agora, testando com begin sequence, que tem erro na seguinte linha do meu errorsys:

   cMessage := if( e:severity > ES_WARNING, "Error ", "Warning " )


Entretanto, esta é uma parte do errorsys que eu não mexi.

O que poderia estar errado aí?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Rotina de ErrorLog

Mensagempor JoséQuintas » 08 Abr 2017 08:58

Sim, tenho 3 versões do Xharbour instaladas, mas só uso uma.


Se só usa uma, não sei porque instalar três. Se for pra escolher, melhor sempre a mais recente.

Uso sim a MySQL. Quanto às DLLs, não sei dizer. Como faço para saber?


Se for igual Harbour, é criada uma lib pra essa dll na geração do xHarbour, pra ficar compatível com tudo.
Se veio tudo pronto com LIBs e DLL, é compatível.
A mesma DLL da geração deve ser usada na execução.

Vi agora, testando com begin sequence, que tem erro na seguinte linha do meu errorsys:


A errorsys é pra tratar.... ERRO.
Ela faz uso do objeto de erro, que contém a propriedade :severity
Se não tem isso, é erro na chamada da errorsys.

O melhor é começar nem com a minha, nem com a sua, mas com a original do Xharbour.
E tente encontrar aonde colocou uso errado da errorsys.

Peguei um exemplo da internet:

 LOCAL objLocal, bLastHandler
        bLastHandler := ERRORBLOCK({ |objErr| MyHandler(objErr, .T.) })
        BEGIN SEQUENCE
           .
           . <operaçao que falha>
           .
        RECOVER USING objLocal
           IF objLocal:genCode != 0
              ?? objLocal:description
           ENDIF
           .
           .
           .
        END
        ERRORBLOCK(bLastHandler)

        FUNCTION MyHandler( objError, lLocalHandler )
           IF lLocalHandler
              BREAK objError
           ENDIF
           .
           . <outras declaraçoes para manipular o erro>
           .
           RETURN NIL


Note que a rotina de erro recebe um parâmetro que é o objeto de erro.

ERRORBLOCK({ |objErr| MyHandler(objErr, .T.) })

Então revise seus fontes, pra ver o que andou fazendo.
Talvez por isso prefiram usar no xHarbour o TRY/CATCH, pra evitar erro.

Só lembrando: Não uso XHarbour, por isso convém confirmar se o funcionamento é igual ao Harbour.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Rotina de ErrorLog

Mensagempor cjp » 08 Abr 2017 17:30

Corrigindo o que eu disse antes: eu também não uso xHarbour, uso Harbour mesmo.

Tenho outras versões porque tentei várias vezes mudar de versão, mas nunca consegui.

A MySQL sempre funcionou bem.

O que é essa severity? Não tinha erro com isso antes, de repente começou a dar erro.

Testei com a errorsys original agora, de novo fecha direto, sem chamar a errorsys.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Anterior Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro