Boa tarde meus colegas.
Estou tentando montar uma função de ErrorLog, mas a coisa não é fácil, e há poucos exemplos. A maioria só trata de setar os dados necessários para que um errorlog funcione.
Para começar, em todos os prg's de error que encontrei, nenhum deles aborda um código que faça o que estou procurando, ou seja, listar as variáveis que estão em uso no instante do erro.
No ambiente MiniGui isto não é possível ?
ErroLog - Captura de variáveis
Moderador: Moderadores
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
ErroLog - Captura de variáveis
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)
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)
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
ErroLog - Captura de variáveis
Amigo, todo controle de erro run time é feito pelo Harbour, então você pode usar qualquer comando do harbour (ou mesmo clipper, já que é compatível) para pegar estas variáveis. Na fonte do xhb da Contrib do Harbour tem o arquivo xhberr.prg que pega todas as variáveis que estão na memória, veja abaixo parte do xhberr.prg que faz isto:
ATENÇÃO: o código acima é apenas uma parte do arquivo, então não é "compilável", servindo apenas para exemplo.
Abraços,
Código: Selecionar todos
SAVE ALL Like * TO errormem
nMemHandle := FOpen( "errormem.mem", FO_READWRITE )
nMemLength := FSeek( nMemHandle, 0, FS_END )
FSeek( nMemHandle, 0 )
nCount := 1
WHILE FSeek( nMemHandle, 0, FS_RELATIVE ) + 1 < nMemLength
nMemWidth := Space( 18 )
FRead( nMemHandle, @nMemWidth, 18 )
cVarName := Left( nMemWidth, At( Chr( 0 ), nMemWidth ) - 1 )
cVarType := SubStr( nMemWidth, 12, 1 )
cVarRec := Bin2W( Right( nMemWidth, 2 ) )
nMemCount := iif( cVarType $ Chr( 195 ) + Chr( 204 ), 14 + cVarRec, 22 )
FSeek( nMemHandle, nMemCount, FS_RELATIVE )
cTemp := Left( cVarName + Space( 10 ), 10 )
cTemp += " TYPE " + Type( cVarName )
cTemp += " " + iif( Type( cVarName ) == "C", '"' + &cVarName + '"', strvalue( &cVarName ) )
nBytes := 0
SWITCH ValType( cVarName )
CASE "C"
nBytes += ( nLenTemp := Len( &cVarName ) )
EXIT
CASE "N"
nBytes += ( nLenTemp := 9 )
EXIT
CASE "L"
nBytes += ( nLenTemp := 2 )
EXIT
CASE "D"
nBytes += ( nLenTemp := 9 )
EXIT
ENDSWITCH
FWrite( nFhandle, " " + Transform( nLenTemp, "999999" ) + "bytes -> " )
FWriteLine( nHandle, " " + cTemp )
ENDDO
FClose( nMemHandle )
FErase( "errormem.mem" )Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
ErroLog - Captura de variáveis
Olá!
No trecho de código mostrado, somente as variáveis public e private dos tipos de dados Character, Date, Logic e Numeric serão salvas, já que o comando SAVE é usado. Variáveis local e static ficarão de fora, assim como arrays e code blocks public e private...
No trecho de código mostrado, somente as variáveis public e private dos tipos de dados Character, Date, Logic e Numeric serão salvas, já que o comando SAVE é usado. Variáveis local e static ficarão de fora, assim como arrays e code blocks public e private...
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
ErroLog - Captura de variáveis
Boa noite amigos.
Esta abertura foi muito boa. Encontrei alguns exemplos muito ricos, principalmente no tópico errorsys no Harbour.
Tenho um vasto material para estudar.
Obrigado.
Esta abertura foi muito boa. Encontrei alguns exemplos muito ricos, principalmente no tópico errorsys no Harbour.
Tenho um vasto material para estudar.
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)
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

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
ErroLog - Captura de variáveis
Boa tarde a todos.
Estou quase terminando e está ficando com a cara desejada. Bem o quase é que é o problema....
Quando da captura das variáveis acontece que consigo recuperar o nome das variáveis (ex: c_Var1), mas quando tento recuperar o conteúdo dela (ex: &c_var1) a coisa não funciona.
Abaixo o código do trecho em questão:
Observar que até onde inicia a parte comentada do código funciona corretamnente, mas basta descomentar a linha seguinte, c_Temp := StrValue( &cVarName ), que busca recuperar o conteúdo da variável, a rotina deixa de funcionar e o aplicativo parece congelar e preciso fechá-lo no Gerenciador de Tarefas do Windows.
O que deve ser feito ?
Estou quase terminando e está ficando com a cara desejada. Bem o quase é que é o problema....
Quando da captura das variáveis acontece que consigo recuperar o nome das variáveis (ex: c_Var1), mas quando tento recuperar o conteúdo dela (ex: &c_var1) a coisa não funciona.
Abaixo o código do trecho em questão:
Código: Selecionar todos
SAVE ALL Like * TO errormem
nMemHandle := FOpen( "errormem.mem", FO_READWRITE )
nMemLength := FSeek( nMemHandle, 0, FS_END )
FSeek( nMemHandle, 0 )
n_Count := 1
WHILE FSeek( nMemHandle, 0, 1 ) + 1 < nMemLength
nMemWidth := Space( 18 )
FRead( nMemHandle, @nMemWidth, 18 )
cVarName := Left( nMemWidth, At( Chr( 0 ), nMemWidth ) - 1 )
cVarType := SubStr( nMemWidth, 12, 1 )
cVarRec := Bin2W( Right( nMemWidth, 2 ) )
nMemCount := IIF( cVarType $ Chr( 195 ) + Chr( 204 ), 14 + cVarRec, 22 )
FSeek( nMemHandle, nMemCount, FS_RELATIVE )
nBytes := 0
*
c_Message += '1-' + cVarName + CRLF
c_Message += '2-' + Type( "cVarName" ) + CRLF
c_Message += '3-' + ValType( cVarName ) + CRLF
* c_Temp := StrValue( &cVarName )
* c_Message += StrValue( &cVarName )
* c_Message += " bytes : "
* c_Message += Left( cVarName + Space( 10 ), 10 )
* cTemp += ' '
* cTemp += ValType( cVarName )
* cTempo += ' '
* cTemp += strvalue( &cVarName )
* cTemp += " ValType " + ValType( cVarName )
* cTemp += " " + IIF( Type( cVarName ) == "C", '"' + &cVarName + '"', strvalue( &cVarName ) )
* c_Message += " VALTYPE " + ValType( cVarName )
* IF ValType( cVarName ) == "C"
* c_Message += '"' + ( cVarName ) + '"'
* ELSE
* c_Mesage += strvalue( &cVarName )
* ENDIF
* *
c_Message += CRLF
* SWITCH ValType( cVarName )
* CASE "C"
* nBytes += ( nLenTemp := Len( &cVarName ) )
* EXIT
* CASE "N"
* nBytes += ( nLenTemp := 9 )
* EXIT
* CASE "L"
* nBytes += ( nLenTemp := 2 )
* EXIT
* CASE "D"
* nBytes += ( nLenTemp := 9 )
* EXIT
* END
ENDDO
FClose( nMemHandle )
FErase( "errormem.mem" )O que deve ser feito ?
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)
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

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
ErroLog - Captura de variáveis
Bom dia colegas.
Nenhuma idéia do que fazer ?
Será que não pode-se usar a funçao MemoRead() que funciona ?
O problema é que não sei como tratar o arquivo, já que a forma de funcionamento do FSeek() é muito diferente do HB_AT().
Nenhuma idéia do que fazer ?
Será que não pode-se usar a funçao MemoRead() que funciona ?
O problema é que não sei como tratar o arquivo, já que a forma de funcionamento do FSeek() é muito diferente do HB_AT().
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)
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

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
ErroLog - Captura de variáveis
UFA....Consegui
Após 2 dias de trabalho duro, "pura queimação de Tico-e-Teco" consegui resolver todos os problemas da Captura das Variáveis.
Segue o código:
Obrigado a todos que colaboraram.
RESOLVIDO...
Após 2 dias de trabalho duro, "pura queimação de Tico-e-Teco" consegui resolver todos os problemas da Captura das Variáveis.
Segue o código:
Código: Selecionar todos
SAVE ALL Like * TO errormem && Somente para variáveis PUBLIC e PRIVATE.
*------------------------------------------------------------------------------------------------------
*
nMemHandle := FOpen( "errormem.mem", FO_READWRITE )
nMemLength := FSeek( nMemHandle, 0, FS_END )
FSeek( nMemHandle, 0 )
n_Count := 0
*
c_Message += ' Tamanho Variável Tipo Valor' + CRLF
c_Message += ' --------------------------------------------' + CRLF
*
WHILE FSeek( nMemHandle, 0, 1 ) + 1 < nMemLength
n_Count ++
nMemWidth := Space( 18 )
FRead( nMemHandle, @nMemWidth, 18 )
cVarName := Left( nMemWidth, At( Chr( 0 ), nMemWidth ) - 1 )
cVarType := SubStr( nMemWidth, 12, 1 )
cVarRec := Bin2W( Right( nMemWidth, 2 ) )
nMemCount := IIF( cVarType $ Chr( 195 ) + Chr( 204 ), 14 + cVarRec, 22 )
FSeek( nMemHandle, nMemCount, FS_RELATIVE )
*
c_Tipo := Type( cVarName )
nBytes := 0
IF c_Tipo = "C"
nBytes += Len( &cVarName )
ELSEIF c_Tipo = "N"
c_Byte := AllTrim( ValToPrg( &cVarName ) ) && passa.
nBytes += Len( c_Byte )
ELSEIF c_Tipo = "L"
nBytes += ( 1 )
ELSEIF c_Tipo = "D"
c_Byte := DtoC( &cVarName ) && passa.
nBytes += Len( c_Byte )
ENDIF
*
c_Message += ' ' + Str( nBytes, 04, 00 ) + ' Bytes -> '
c_Message += PADR( cVarName, 13 ) + 'Tipo '
c_Message += Type( cVarName ) + ' = '
*
IF Type( cVarName ) $ "C"
c_Message += ValToPrg( &cVarName )
ELSEIF Type( cVarName ) = "L"
c_Message += ValToPrg( &cVarName )
ELSEIF Type( cVarName ) = "D"
c_Message += DtoC( &cVarName )
ELSEIF Type( cVarName ) = "N"
c_Message += AllTrim( Transform( &cVarName, '999999999' ) )
ELSE
c_Message += 'Indefinida'
ENDIF
c_Message += CRLF
*
ENDDORESOLVIDO...
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)
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)