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:
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:
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.