Erro interno

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

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

Erro interno

Mensagem por cjp »

Pessoal, tenho recebido com certa frequência a seguinte mensagem de erro em meus programas compilados com o Harbour:

Código: Selecionar todos

Application Internal Error - C:\tarefas\tar2p.exe Terminated at: 2013.11.14 20:23:38 Unrecoverable error 6005: Exception error: 

    Exception Code:C0000005
    Exception Address:00000000
    EAX:00C45F18  EBX:00C45F24  ECX:00C17EFC  EDX:0000000A
    ESI:00000005  EDI:00C1D6E4  EBP:0022FA9C
    CS:EIP:001B:00000000  SS:ESP:0023:0022F8EC
    DS:0023  ES:0023  FS:003B  GS:0000
    Flags:00010206
    CS:EIP:
    SS:ESP: 005368BF 00C45F24 00C1D6E4 00000000 00C45F24 00C1D6E4 00000080 00000005 000003EC 00C1D6D0 00000000 00000000 00C45F24 0022FA9C 0022F994 0000D112

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    00000000 0022FA9C   00C1D6E4 00000000 00000000 00000000 00C45F24 00000000 00000000 00000000 0052E943 00C45F24


Modules:
0x00400000 0x0025B000 C:\tarefas\tar2p.exe 0x7C900000 0x000B6000 C:\WINDOWS\system32\ntdll.dll 0x7C800000 0x00100000 C:\WINDOWS\system32\kernel32.dll 0x77F50000 0x000AB000 C:\WINDOWS\system32\ADVAPI32.DLL 0x77DB0000 0x00092000 C:\WINDOWS\system32\RPCRT4.dll 0x77F20000 0x00011000 C:\WINDOWS\system32\Secur32.dll 0x77E50000 0x00049000 C:\WINDOWS\system32\GDI32.dll 0x7E360000 0x00091000 C:\WINDOWS\system32\USER32.dll 0x77BF0000 0x00058000 C:\WINDOWS\system32\msvcrt.dll 0x774C0000 0x0013D000 C:\WINDOWS\system32\OLE32.dll 0x77100000 0x0008B000 C:\WINDOWS\system32\OLEAUT32.DLL 0x72FB0000 0x00026000 C:\WINDOWS\system32\WINSPOOL.DRV 0x71A70000 0x00017000 C:\WINDOWS\system32\WS2_32.dll 0x71A60000 0x00008000 C:\WINDOWS\system32\WS2HELP.dll 0x76360000 0x0001D000 C:\WINDOWS\system32\IMM32.DLL 0x77B20000 0x00022000 C:\WINDOWS\system32\Apphelp.dll 0x77BE0000 0x00008000 C:\WINDOWS\system32\VERSION.dll 0x71A10000 0x00040000 C:\WINDOWS\System32\mswsock.dll 0x76F00000 0x00027000 C:\WINDOWS\system32\DNSAPI.dll 0x76F90000 0x00008000 C:\WINDOWS\System32\winrnr.dll 0x76F40000 0x0002D000 C:\WINDOWS\system32\WLDAP32.dll 0x64000000 0x00021000 C:\Arquivos de programas\Bonjour\mdnsNSP.dll 0x76D40000 0x00019000 C:\WINDOWS\system32\Iphlpapi.dll 0x76FA0000 0x00006000 C:\WINDOWS\system32\rasadhlp.dll 0x60B30000 0x00058000 C:\WINDOWS\system32\hnetcfg.dll 0x71A50000 0x00008000 C:\WINDOWS\System32\wshtcpip.dll
Alguns já me disseram que isso seria problema do Harbour, e que eu deveria mudar para o xHarbour para isso não ocorrer mais. Será que é isso mesmo? Será que não tem outro jeito de resolver isso sem ter que voltar ao xHarbour?
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Erro interno

Mensagem por alxsts »

Olá!

Não creio que seja o caso de voltar para o xHarbour.

Talvez seja o caso de atualizar a versão do Harbour que você utiliza.

Forneça algumas informações adicionais:
- qual a versão do Harbour utilizada
- qual o compilador C utilizado e a versão (GCC, MingW...)
- sistema operacional (versão, se é 32 ou b4 bits...)
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Erro interno

Mensagem por cjp »

Eu uso o Harbour 3.0.

Não uso compilador C, compilo diretamente com o hbmk2.

No computador que estou usando agora, estou com o Win XP instalado. Mas também uso dois outros computadores com Win 7, ambos de 64 bits. O erro ocorre tanto nos meus computadores quanto no dos usuários, uns usando XP, outros Win 7 de 64 bits.
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Erro interno

Mensagem por alxsts »

Olá!
cjp escreveu:Não uso compilador C, compilo diretamente com o hbmk2.
Talvez você nunca tenha percebido mas usa um compilador C.

O HbMk2 lê um script de entrada e executa o Harbour. O Harbour, por sua vez, lê cada arquivo .PRG do script e o transforma em um arquivo .C. O compilador C (pode ser o BCC, MinGW, MSVC, Pelles ou GCC para Linux/Unix) lé o arquivo .C e cria um .OBJ. Depois o linkeditor lê os .OBJ, junta com as libs e gera o .EXE ou .DLL.

Eu insistiria em compilar o teu sistema com outra instalação do Harbour, para descartar a possibilidade de ser o Harbour ou o compilador C que o acompanha. Pesquisei esse erro na net e vi alguns casos de colegas que o receberam, ao usar HBIDE com QT. Acredito que não seja o teu caso.
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Erro interno

Mensagem por cjp »

De fato, não sabia que o hbmk2 usava um compilador C. Na verdade nem sei direito o que seria um compilador C.

Quando vc diz para compilar o meu sistema com outra instalação do Harbour, seria para eu usar versão diferente da que eu uso atualmente? Neste caso, qual seria a versão indicada? E de onde consigo baixá-la?
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

Erro interno

Mensagem por JoséQuintas »

O Harbour tem versão nova todo dia, mas não precisa atualizar todo dia.
Se usa só a parte padrão do Harbour, baixe a versão de hoje, e pode ficar usando ela por um longo tempo, ou até o resto da vida.

Como encontrar?
Fácil:
vai no harbour-project.org
downloads
binaries windows
nightly

A versão nightly ("da noite") é a última versão com tudo que foi atualizado no dia anterior, pronta pra uso.

Importante:
O Harbour 3.0 é o pacote já fechado, contém não só o Harbour, mas bibliotecas adicionais, que não fazem parte do Harbour básico.
O Harbour nightly contém o Harbour básico, e as bibliotecas padrão, mas pronto pra uso.
Se usa a parte padrão, é suficiente pra trabalhar.
Se usa algo mais, aí vai precisar perguntar sobre o "algo mais" (gtqtc, cairo, libcurl, etc).
O resto pode ser adicionado depois, SE precisar.
No meu caso, o Harbour nightly é suficiente, e uso GTWVG, PDF, ZIP, etc.
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:

Erro interno

Mensagem por cjp »

Segui tuas instruções, parece que instalou a seguinte versão:

Código: Selecionar todos

Harbour Make (hbmk2) 3.2.0dev (r2013-11-08 16:08)
Copyright (c) 1999-2013, Viktor Szakáts
http://harbour-project.org/
Translation (pt-BR): Vailton Renato <vailtom@gmail.com>
Está correto?
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

Erro interno

Mensagem por JoséQuintas »

Isso.
Está mostrando como Harbour 3.2, que é o mais recente.
E última alteração do Harbour 3.2 em 08/11/2013 (r2013-11-08)

Agora só usar.
A princípio só precisa do set path=c:\harbour\bin (a pasta bin de onde instalou o harbour)
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:

Erro interno

Mensagem por cjp »

Ok, já compilei o programa com ele. Por enquanto, não deu esse "erro interno". Vou testar mais. Obrigado por enquanto.
Inacio de Carvalho Neto
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Erro interno

Mensagem por bencz »

poderia tentar re-produzir este erro, em um pequeno código de exemplo ?
Imagem
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Erro interno

Mensagem por cjp »

O problema é que o erro estava ocorrendo em pontos aleatórios do programa, sem que houvesse efetivamente erro no programa (até onde pude apurar). Pareceu-me algo como um "estouro de pilha". Quando dava o erro, aparecia o que eu postei no início deste post.

Por ora, não ocorreu mais. Se voltar a ocorrer (espero que não), eu posto novamente.
Inacio de Carvalho Neto
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Erro interno

Mensagem por bencz »

stack over flow é algo q pode acontecer nos programas harbour, pois, o código é compilado para funcionar com uma VM interna no harbour, provavelmente o GC do harbour está com falhas grandes, que teriam q ser corrigidas, ou, seu programa está com alguma falha, onde você se esquece de livrar alguma variavel que carrega uma carga grande de informações, ou, a memoria do seu computador está corrompida, algo do tipo....
Imagem
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Erro interno

Mensagem por cjp »

Bom, neste caso, imagino que o problema possa ser no meu programa, por não liberação de variáveis, o que de fato não faço (e nem sei como fazer).

Tenho o grave defeito de trabalhar sempre com variáveis públicas. Estou corrigindo isso aos poucos, mas isso depende de reescrever várias partes do programa, por isso estou fazendo bem devagar.

Se o problema for realmente de uso de variáveis públicas, gostaria de saber: 1) como faço para liberar variáveis; 2) se existe um número fixo de variáveis públicas que podem ser usadas; 3) se existe algum jeito de saber de antemão quantas variáveis estão abertas.
Inacio de Carvalho Neto
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Erro interno

Mensagem por bencz »

Oque acontece, eu não sei exatamente como o harbour trata as variaveis publidas, mas, te garanto que elas consomem muita memoria.. pois vc acaba guardando alguma coisa la, e deixa la, e esquece da variavel
ou seja, isso vai causar um consumo de memoria gigantesco... o uso de variaveis STATIC ou GLOBAIS tem q ser muito bem calculado, para que não aconteça uma GRANDE M***A, entedes ?

Então, para você limpar uma variavel, você tem varias formas, uma das mais inteligentes e uteis, que eu conheço, é, igualar a variavel à NIL

exemplos:

Código: Selecionar todos

MINHA_VARIAVEL := NIL
Não existe um limite de variaveis publicas que você pode usar, o limite é a sua memoria...
Imagem
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Erro interno

Mensagem por bencz »

cjp, reparei agora, qual é o código da exceção, bom, este código é sinal que seu programa está gravando informação na momoria, onde ele nao deveria entrar...

http://stackoverflow.com/questions/1716 ... 0005-in-vc
Imagem
Responder