Rotina de ErrorLog

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Rotina de ErrorLog

Mensagem por Hasse »

Explico, neste meu programa abre uma tela minúscula no canto superior direito, informando na barra, qual a COM que está sendo lida. No corpo, via label, informa se a porta está ATIVA ou INATIVA. Quando está comunicando, aparecem, no local do texto,, setas do tipo <<<<<<<<<< dinâmicas. Assim que a comunicação termina volta a informação do estada da porta. Veja o código da única janela abaixo:

Código: Selecionar todos

   n_X1     := PRM->PRMLIN                   // Endereços de tela.
   n_Y1     := PRM->PRMCOL
   n_Interv := 200                           // Intervalo entre leituras da Serial.
   *
   DEFINE WINDOW principal AT n_X1, n_Y1 WIDTH 200 HEIGHT 80 ;
      TITLE "JS600 - COM " + c_Porta MAIN ;
      ON INIT Dados_Iniciais( c_Form ) ;
      ON RELEASE { || COM_CLOSE( n_Porta ) }
      *
      @ 12, 15 LABEL label_1 WIDTH 160 HEIGHT 16 ;
         VALUE 'COM ' + c_Porta + " => INATIVA" ;
         FONT 'Times New Roman' SIZE 14
         principal.label_1.fontcolor := RED
         *
      DEFINE TIMER Timer_1 INTERVAL n_Interv ACTION Ctrl_Read()      
      *
   END WINDOW
   ACTIVATE Window principal
O demais é dedicado ao controle de leitura e escrita da porta serial.

Durante os teste de uma rotina de ErrorLog, me deparei com algo estranho: Enquanto em modo janela (DOS) eu consigo gravar as variáveis de memória ativas no momento do erro com:
Save All Like * to ErrorMem
A partir deste arquivo pode-se listar todas as variáveis públicas e de herança, o que facilita muito a identificação do erro.
Quando em modo GUI isto não funciona. Há alguma Função que permita este acesso ?

O trecho abaixo também não funciona em modo GUI, onde identifica o erro, a descrição, o seu tipo, etc..., a linha e o módulo onde ocorreu o erro:

Código: Selecionar todos

         __Error := Padr('Tipo de Mensagem .: ' + oErr:SubSystem(),50 ) + ";" +;
                    Padr('N£mero do Erro ...: ' + StrValue(oErr:SubCode()),50 ) + ";" +;
                    Padr('Descri‡Æo ........: ' + oErr:Description(),50) + ";" +;
                    Padr('Objeto do Erro ...: ' + Upper(oErr:Operation() ),50) + ";" +;
                    Padr('Erro do DOS ......: ' + Strvalue(oErr:OsCode() ),50) + ";" +;
                    Padr('µrea de Trabalho .: ' + StrValue(Select() ),50) + ";" +;
                    Padr('Nome do Arquivo ..: ' + oErr:FileName(),50) + ";" +;
                    Padr('Module Name.... ..: ' + oErr:ModuleName(),50) + ";" +;
                    Padr('M¢dulo .....: ' + Procname(2) + REPLICATE(".",15-LEN(Procname(2))) +;
                         ': Linha... ' + StrValue(Procline(2)),50)
Eu já vi que a GUI oferece uma rotina, um pouco diferente, com menos dados. Existe alguma função que me forneça estes dados ?

No Anexo gravei um arquivo dos dados do ErrorLog para analise.
Editado pela última vez por Pablo César em 06 Jun 2013 16:42, em um total de 1 vez.
Razão: Mensagem re-editada para gerar novo tópico e enquadrar-se as regras do forum.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Rotina de ErrorLog

Mensagem por Pablo César »

Visto que o seu programa é GUI e não modo console, é necessário entender que quando programamos em GUI, temos objetos, os GETs deixam de existir. Portanto o ErrorSys não é mais utilizado. Imagino que essa sua função que gera o ErrorLog, esteja vinculado com o ErrorSys, não é ?

Notei também por causa do objeto err:, isso é utilizado nas ferramentas de POO (Programação Orientada a Objetos), podem ser semi-POO como no caso do Clipper. Mas a Minigui (Extended e versão 3 da HMG), não são POO. A versão HMG 4, sim por causa do uso do QT. Portanto, você terá que re-escrever a sua função de captar o erro.
Hasse escreveu:Enquanto em modo janela (DOS) eu consigo gravar as variáveis de memória ativas no momento do erro com:
Save All Like * to ErrorMem
A partir deste arquivo pode-se listar todas as variáveis públicas e de herança, o que facilita muito a identificação do erro.
Bom herança ? Acho que não seria o termo apropriado. Mas lembre que o Save to só irá pegar as variáveis Públic e Private, as que são do tipo Local e Static não irá tomar conhecimento.

Na pasta C:\MiniGUI\SAMPLES\BASIC\MyErrorFunc da Extended, vai encontrar um exemplo de manipulação de Erro para GUI.
Hasse escreveu:No Anexo gravei um arquivo dos dados do ErrorLog para analise.
Faltou anexar o arquivo (mas tudo bem para mim, não precisa).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Rotina de ErrorLog

Mensagem por Hasse »

Perdão pela "pisada na bola" do desvio. No embalo do assunto, nem percebi o acontecido.

Beleza. Vou avaliar e testar esta rotina.

Obrigado.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Rotina de ErrorLog

Mensagem por Hasse »

Boa noite Pablo.

Encontrei o arquivo \SAMPLES\BASIC\MyErrorFunc\FncMyError.prg, da versão 2.2.2 (extended), que compilado apresenta erro em SET ERRORLOG TO.

Na pasta \SAMPLES\ encontrei o mesmo PRG, da versão 3.1.3, onde tenho as 2 linhas:
cErrorMsg := MyErrorMessage( MyObjError )
/// SET ERRORLOG TO GetStartupFolder() + "\MyErrors.htm"
Observar que a linha do SET ERROLOG está comentada, nesta versão 3.1.3.

Este código, em tempo de execução, em modo GUI, apresenta os erros:
Error BASE/1004 No exported method: SEVERITY
Error BASE/1004 No exported method: SUBSYSTEM
Error BASE/1004 No exported method: SUBCODE
Error BASE/1004 No exported method: DESCRIPTION
Error BASE/1004 No exported method: FILENAME
Error BASE/1004 No exported method: OPERATION
No "FncMyError.Prg" tenho:
cMessage := IIF( oError:severity > ES_WARNING, "Error", "Warning" ) + " "
IF ! HB_ISNUMERIC( oError:subsystem )
IF HB_ISNUMERIC( oError:subCode )
IF ! HB_ISNUMERIC( oError:description )
CASE !Empty( oError:filename )
CASE !Empty( oError:operation )
Vejo que possivelmente o objeto "oError" não exista. Estou certo ?

Como contornar isto ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Rotina de ErrorLog

Mensagem por cjp »

Estou ressuscitando este post pois estava pesquisando o erro BASE/1004 Método não exportado: SEVERITY, e encontrei aqui referência a ele.

Comecei a receber este erro recentemente numa função que antes não dava erro.

Observo que uso modo console, não uso minigui.

Alguém poderia me explicar o que significa este erro?
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Rotina de ErrorLog

Mensagem por JoséQuintas »

Veja o fonte e linha onde foi indicado erro.
Só essa mensagem não é suficiente pra saber alguma coisa.
Acredito que talvez esteja usando uma errorsys diferente, se o erro for na errorsys.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Rotina de ErrorLog

Mensagem por cjp »

Sim, a linha do erro é:

Código: Selecionar todos

verarqv("proc2p.exe")


Já conferir que o arquivo não está na função verarqv, está na chamada a ela.

Sim, eu uso o meu próprio errorsys, mas isso influi? O erro estaria no meu errorsys? Mas ele funciona normalmente em todos os casos.
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Rotina de ErrorLog

Mensagem por JoséQuintas »

Com toda certeza, a linha do erro não é essa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Rotina de ErrorLog

Mensagem por JoséQuintas »

Desculpe, esqueci do principal: estamos no tópico de minigui.

Boa oportunidade pra testar minha errorsys.
Se a minigui deixar talvez veja o erro real com ela..
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Rotina de ErrorLog

Mensagem por cjp »

Eu também acho estranho esse erro nessa linha, não faz sentido, mas é nessa linha que está apontando o erro. E já fiz vários testes na própria função verarqv(), não é lá.

Como posso testar o teu errorsys? Ou vc quer testar aí?
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Rotina de ErrorLog

Mensagem por JoséQuintas »

José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Rotina de ErrorLog

Mensagem por cjp »

Uma dúvida: essa teu errorsys só funciona na minigui? Eu não uso minigui.

Mas ainda não entendi como o erro pode ser no errorsys. É possível isso?

Mesmo sem o meu errorsys, veja, testei assim:

Código: Selecionar todos

      bError := ErrorBlock( {|e| Break(e) } )
      begin sequence
            verarqv("proc2p.exe")
      recover using e
            cMessage := ErrorMessage(e)
			if at("Erro de criação",cMessage)=0
               logerro()
               mandmail1("error.log","Erro na execução dos verarqv contornado com o recover do begin sequence")
			endif
      endsequence
      ErrorBlock( bError )
E está apontando erro justamente na linha verarqv("proc2p.exe").
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Rotina de ErrorLog

Mensagem por JoséQuintas »

É óbvio que assim mostra essa linha.
Isso é justamente pra esconder mensagens de erro.

Minha errorsys é pra qualquer coisa, de console a GUI.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Rotina de ErrorLog

Mensagem por cjp »

Não sei se te entendi bem, pois eu sempre usei o recover para evitar erros, mas ele sempre me enviou o local correto do erro.

Estou há 2 dias testando a tua errorsys, mas estou tendo problema.

Quando testo com um programa simples assim:

Código: Selecionar todos

function main
cls
?"3"
inkey(1)
?aaa
inkey(1)
?"5"
inkey(1)
return
Ela funciona, dá erro na linha 5, variável aaa inexiste.

Entretanto, quando testo no meu sistema, nem entra na errorsys, o programa fecha direto, sem qualquer mensagem de erro.

Detalhe: com a minha errorsys acontece a mesma coisa.

Imagino que tenha alguma coisa no meu sistema que esteja impedindo a errorsys de funcionar. Mas o que seria?

Estou compilando assim:

Código: Selecionar todos

# coloque aqui suas libs, precedidas pela letra "l" (minúscula):
-lxhb
-lhbwin
-lhbtip
-lhbct
-lhbHPdf
-lhbZebra
-lhbmisc
-llibmysql
rddsql.hbc 
sddodbc.hbc
hbwin.hbc

# coloque aqui os parâmetros de compilação:
-quiet
-jobs=4
-oTAGENDA

# coloque aqui seus arquivos PRGs:
\prg\TAGENDA.PRG
\prg\AGTEL.PRG
\prg\COMUNS.PRG
\prg\CONTAG.PRG
\prg\BANCO.PRG
\prg\AGCOM.PRG
\prg\ERRORS3.PRG
\prg\GETSYS.PRG
\prg\MANUTENCAO.PRG
Onde errors3.prg é a tua errorsys.
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Rotina de ErrorLog

Mensagem por JoséQuintas »

Quando você usa BEGIN SEQUENCE, tá trocando a errorsys padrão por outra.
Se a minha errorsys ainda está original, faça um teste trocando logerro() por WriteErrorLog( cMessage, 2 )
e mandmail1("hb_out.log","Erro na execução dos verarqv contornado com o recover do begin sequence")
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder