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 Hasse » 06 Jun 2013 15:37

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:
   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:
         __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.
Nota de Moderação:
Pablo César: 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 de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

Rotina de ErrorLog

Mensagempor Pablo César » 06 Jun 2013 17:08

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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Rotina de ErrorLog

Mensagempor Hasse » 06 Jun 2013 19:11

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)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

Rotina de ErrorLog

Mensagempor Hasse » 06 Jun 2013 21:26

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)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 815
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 24 vezes

Rotina de ErrorLog

Mensagempor cjp » 20 Mar 2017 15:35

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
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 » 20 Mar 2017 18:42

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, 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: 18007
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 » 20 Mar 2017 23:11

Sim, a linha do erro é:

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
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 » 21 Mar 2017 08:53

Com toda certeza, a linha do erro não é essa.
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: 18007
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 JoséQuintas » 21 Mar 2017 10:00

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, 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: 18007
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 » 21 Mar 2017 15:18

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
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 » 21 Mar 2017 15:53

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: 18007
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 » 21 Mar 2017 17:01

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:

      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
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 » 21 Mar 2017 19:34

É ó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, 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: 18007
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 » 24 Mar 2017 00:06

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:

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:

# 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
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 » 24 Mar 2017 01:34

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, 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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 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