Página 4 de 5

Rotina de ErrorLog

Enviado: 08 Abr 2017 19:05
por JoséQuintas
Não lembro aonde vi algo sobre xharbour....

Já que está com problemas, o negócio seria aproveitar e usar uma versão do Harbour atual.

Afinal, que versão está usando?

Rotina de ErrorLog

Enviado: 08 Abr 2017 19:10
por cjp
Uso a 3.2. Tentei mudar para a 3.4, mas não funcionou.

De onde posso baixar a versão mais atual?

Sim, fui eu que falei errado em xHarbour.

Rotina de ErrorLog

Enviado: 08 Abr 2017 20:31
por JoséQuintas
Podemos definir o mundo Harbour como sendo 3 versões:

- Harbour 3.2
- Harbour 3.4
- xHarbour

Usa mingw?
Se usar mingw mais fácil, só baixar e usar.
Correção: depende se usa algum extra, e é possivel que o MySql seja um extra.

Nesta página: https://sourceforge.net/projects/harbou ... s/nightly/

Detalhe:
Depende do quão antiga é sua versão, ou se misturou alguma coisa. Faz um bom tempo que o Harbour 3.2 funciona perfeito.
Não uso nenhum extra, então não vou saber dizer como criar os extras.

Quando usa extras, não sei se o MySQL é um deles, é necessário:

- Baixar o componente adicional, que contém a DLL e arquivos #include pra C (.H)
- Gerar uma LIB pra acesso a essa DLL e/ou o componente extra direcionado pra exatamente essa DLL

É por isso que trocar de Harbour pode ser complicado: tem que lembrar o que adicionou de extra, e adicionar novamente, compatível com o novo.
Se obteve de alguém... tente obter desse alguém de novo, caso não consiga resolver.

E se quebrar a cabeça pra resolver, já anote o que fez, pra da próxima vez ser mais fácil.

Como eu não uso extras, apenas baixo os fontes do Harbour e gero. (Harbour 3.4).
Pra isso so precisa o compilador C e nada mais.

Rotina de ErrorLog

Enviado: 09 Abr 2017 00:09
por cjp
Não uso Minigui.

No link que vc passou tem 3 arquivos, correto? Um txt, um .exe, que parece que é o da minigui, e um .zip, que parece que é o harbour 3.2, correto?

Baixei este último, salvei em uma pasta diferente da que eu estava usando, e compilei com ele, sem a minha errorsys, e continua o mesmo problema: fecha direto, sem entrar na errorsys do Harbour.

Rotina de ErrorLog

Enviado: 09 Abr 2017 00:24
por JoséQuintas
No Harbour 3.2 é obrigatório configurar:

SET HB_INSTALL_PREFIX=pasta do harbour

Fez isso?

Lembrando que em SET PATH é pra deixar o Harbour que instalou agora, e retirar os outros.

Depois disso, só restam seus fontes mesmo.... rs

Rotina de ErrorLog

Enviado: 09 Abr 2017 00:29
por JoséQuintas
Não sei se dá certo, colocar todo seu aplicativo dentro de uma errorsys, pra descobrir aonde sai.

Código: Selecionar todos

BEGIN SEQUENCE
   SuaMain()
RECOVER
   WriteErrorLog() // A CallStack
END SEQUENCE
A intenção seria gravar em que ponto saiu.

Rotina de ErrorLog

Enviado: 09 Abr 2017 00:43
por cjp
Não fiz não. Desculpe a ignorância, mas onde configura esses SETs?

Tentei colocar a main() dentro de um begin sequence, mas não compila.

De qualquer forma, acho que não funcionaria. Afinal, como vc mesmo disse, a begin sequence desvia da errorsys, correto? Então, ele vai apontar onde está o erro que estou provocando. Mas a questão não é essa. O problema é que não está entrando na errorsys e fechando direto. Quando desvio com o begin sequence, dá tudo certo.

Rotina de ErrorLog

Enviado: 09 Abr 2017 02:53
por JoséQuintas
Não é simplesmente colocar a Main em begin sequence.

Seria algo como:

Código: Selecionar todos

FUNCTION Main()

   BEGIN SEQUENCE
      SuaAntigaMain()
      BREAK
   RECOVER
      MostrarCallStack()
   END SEQUENCE
   MostrarCallStack()
...
mingw não é minigui. mingw é o compilador C padrão.

No windows:

Código: Selecionar todos

SET PATH=????
SET HB_INSTALL_PREFIX=?????
Quando desvio com o begin sequence, dá tudo certo.
Por acaso está retornando direito a errorsys anterior no final?

Rotina de ErrorLog

Enviado: 10 Abr 2017 00:31
por cjp
Realmente foi burrice minha.

Mas agora fiz assim:

Código: Selecionar todos

#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

PROCEDURE Main
          bError := ErrorBlock( {|e| Break(e) } )
          begin sequence
                agenda()
          recover using e
                  cMessage := ErrorMessage(e)
                  logerro()
                  mandmail1("error.log","Erro na função agenda contornado com o recover do begin sequence")
          endsequence
          ErrorBlock( bError )
return

function agenda
...
Assim imagino que era pra funcionar, mas estranhamente, está fechando direto.

Desculpe, mas esta parte eu ainda não entendi:
No windows:
SET PATH=????
SET HB_INSTALL_PREFIX=?????
Sempre retorno assim, veja se está certo:

Código: Selecionar todos

          endsequence
          ErrorBlock( bError )
Tá certo?

Rotina de ErrorLog

Enviado: 10 Abr 2017 17:16
por JoséQuintas
O Harbour 3.2 tem um bug, ele usa o SET HB_INSTALL_PREFIX também na compilação, e deveria ser somente na geração.

De nada adianta configurar o PATH, se não ajustar também SET_HB_INSTALL_PREFIX, variável de ambiente do Windows.

O que acontece com sua função quando dá erro no fonte dela, ou não consegue enviar email?
Sai do sistema?

Olhou a hb_out.log?
Isso é log de erros do HARBOUR, não da errorsys.

Rotina de ErrorLog

Enviado: 14 Abr 2017 21:53
por cjp
O que eu não entendi foi como fazer isso na prática? Seria colocar no .hbp? No .bat?

O programa fecha direto, não dá qualquer erro. Não cria o log de erro, não tem arquivo hb_out.log.

Rotina de ErrorLog

Enviado: 14 Abr 2017 23:27
por JoséQuintas
O que eu não entendi foi como fazer isso na prática? Seria colocar no .hbp? No .bat?
não ajustar também SET_HB_INSTALL_PREFIX, variável de ambiente do Windows.
Se é no Windows, não pode ser no HBP. Ou no BAT ou no Windows.

Acabei de passar por um problema parecido, mas pelo menos aparecia na tela.
É essa merd. de mania dessas bost. de GUIs inventarem errorsys, ou modificarem até o comportamento padrão do Harbour.
Foi com HWGUI.

Resolvi de forma radical:
Já que essas bost. modificam a apresentação em tela do Harbour, removi qualquer uso de tela da errorsys.
Agora é somente o bloco de notas e nada mais.

Código: Selecionar todos

   //DO WHILE ( nChoice == 0 )
   //   IF ( Empty(e:osCode) )
   //      nChoice := Alert( cMessage, aOptions )
   //   ELSE
   //      nChoice := Alert( cMessage + ";(DOS Error " + Ltrim( Str( e:OsCode ) ) + ")", aOptions )
   //   ENDIF
   //   IF ( nChoice == NIL )
   //      EXIT
   //   ENDIF
   //ENDDO
   //
   //IF ! Empty( nChoice )
   //   // do as instructed
   //   IF ( aOptions[ nChoice ] == "Break" )
   //      Break(e)
   //   ELSEIF ( aOptions[ nChoice ] == "Retry" )
   //      RETURN (.T.)
   //   ELSEIF ( aOptions[ nChoice ] == "Default" )
   //      RETURN (.F.)
   //   ENDIF
   //ENDIF

Called from (b)ERRORSYS(17)
Called from TESTHWGUI(37)
Called from (b)MAIN(8)

Error BASE/1003 Variable does not exist: CODIGO

Rotina de ErrorLog

Enviado: 23 Abr 2017 01:33
por cjp
Eu realmente não sei mais o que fazer para resolver isso. Acho que vou ter que desistir.

Por favor, só me responda mais uma coisa, que eu já tinha perguntado acima: como vc faz a atualização do sistema no computador dos teus usuários? Como envia o arquivo de atualização? Manda compactado? Manda o próprio EXE?

Rotina de ErrorLog

Enviado: 23 Abr 2017 12:38
por JoséQuintas
Já respondi antes.
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.
Quanto à errorsys....
Se retirou as mexidas da errorsys, não usa nenhuma lib gráfica....
Se tem certeza que ajustou TODOS os fontes envolvidos, de todas as pastas (pode ser que estão separados e só olhou uma pasta)...
De diferente só resta esse uso de MySQL, mas muita gente usa assim, então tente se informar porque senão a mudança vai ser radical nos fontes pra mudar isso.

Rotina de ErrorLog

Enviado: 23 Abr 2017 23:59
por cjp
O que ainda não entendi é como vc baixa? Por ftp? Se não, de onde baixa? Como faz para baixar?

E como vc consegue renomear o EXE com o programa em execução?

Quanto à errorsys, já testei com a errorsys do Harbour. Não uso nenhuma lib gráfica. Não sei mais o que fazer. O que mais me intriga é esse erro método não exportado: SEVERITY, que, até onde sei, é problema do Harbour, não é da minha aplicação.