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 »

Infelizmente, o erro voltou a ocorrer. Comigo ainda não, mas no computador de um usuário.

Eis o erro:

Código: Selecionar todos

Application Internal Error - C:\tarefas\tar2p.exe Terminated at: 2013.11.21 14:25:45 Unrecoverable error 6005: Exception error: 

    Exception Code:C0000005
    Exception Address:0053A6EA
    EAX:00000000  EBX:0035F0EC  ECX:00000002  EDX:00000003
    ESI:00359484  EDI:00000002  EBP:00000000
    CS:EIP:0023:0053A6EA  SS:ESP:002B:0028F990
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010246
    CS:EIP: 8B 47 0C 89 04 24 E8 AB 20 EE FF BA 0A 00 00 00
    SS:ESP: 00000CA3 00000000 0000D112 00000000 0035FE94 777AE023 00340464 0052E1C4 00350AAC 00000009 00340464 00000006 0028F901 00000001 00597680 0000002C

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...

Modules:
0x00400000 0x0025B000 C:\tarefas\tar2p.exe 0x77780000 0x00180000 C:\Windows\SysWOW64\ntdll.dll 0x750B0000 0x00110000 C:\Windows\syswow64\kernel32.dll 0x75690000 0x00047000 C:\Windows\syswow64\KERNELBASE.dll
0x75330000 0x000A0000 C:\Windows\syswow64\ADVAPI32.DLL 0x753D0000 0x000AC000 C:\Windows\syswow64\msvcrt.dll 0x75C60000 0x00019000 C:\Windows\SysWOW64\sechost.dll 0x75E80000 0x000F0000 C:\Windows\syswow64\RPCRT4.dll 0x74E60000 0x00060000 C:\Windows\syswow64\SspiCli.dll 0x74E50000 0x0000C000 C:\Windows\syswow64\CRYPTBASE.dll 0x75DF0000 0x00090000 C:\Windows\syswow64\GDI32.dll 0x74FB0000 0x00100000 C:\Windows\syswow64\USER32.dll 0x74F10000 0x0000A000 C:\Windows\syswow64\LPK.dll 0x75FA0000 0x0009D000 C:\Windows\syswow64\USP10.dll 0x751C0000 0x0015C000 C:\Windows\syswow64\OLE32.dll 0x74F20000 0x0008F000 C:\Windows\syswow64\OLEAUT32.DLL 0x70A90000 0x00051000 C:\Windows\system32\WINSPOOL.DRV 0x75650000 0x00035000 C:\Windows\syswow64\WS2_32.dll 0x77750000 0x00006000 C:\Windows\syswow64\NSI.dll 0x75A60000 0x00060000 C:\Windows\system32\IMM32.DLL 0x75D20000 0x000CC000 C:\Windows\syswow64\MSCTF.dll 0x73500000 0x0004C000 C:\Windows\system32\apphelp.dll 0x70740000 0x00010000 C:\Windows\system32\NLAapi.dll 0x70730000 0x00010000 C:\Windows\system32\napinsp.dll 0x70710000 0x00012000 C:\Windows\system32\pnrpnsp.dll 0x71010000 0x0003C000 C:\Windows\System32\mswsock.dll 0x70B80000 0x00044000 C:\Windows\system32\DNSAPI.dll 0x70700000 0x00008000 C:\Windows\System32\winrnr.dll 0x706D0000 0x00027000 C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live\WLIDNSP.DLL 0x75890000 0x00005000 C:\Windows\syswow64\PSAPI.DLL 0x76CC0000 0x00057000 C:\Windows\syswow64\SHLWAPI.dll 0x70FD0000 0x0001C000 C:\Windows\system32\IPHLPAPI.DLL 0x70FC0000 0x00007000 C:\Windows\system32\WINNSI.DLL 0x6FBB0000 0x00038000 C:\Windows\System32\fwpuclnt.dll 0x706C0000 0x00006000 C:\Windows\system32\rasadhlp.dll 0x71000000 0x00005000 C:\Windows\System32\wshtcpip.dll
A linha indicada como o local onde teria ocorrido o erro está somente com um endif, o que evidencia que não há realmente erro no programa.

Estou usando o HB 3.2 em todos os programas agora.

É certo que ainda não refiz os programas para usar corretamente as variáveis, mas o que mais me intriga neste erro é que ele ocorre com mais frequência (embora não exclusivamente) num programa pequeno, chamado por outro frequentemente, que roda por alguns minutos apenas e já fecha. Não daria tempo para as poucas variáveis desse programa estarem se acumulando a ponto de criarem problema de memória.

Além disso, tenho usado com frequência a função memory() para checar a memória disponível, e ela está sempre alta.

Alguém teria alguma luz para me dar a este respeito?
Inacio de Carvalho Neto
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Erro interno

Mensagem por Hasse »

Boa noite colegas.

Também existe uma outra forma de liberar variáveis: o comando RELEASE, que pode ser usado para variáveis individualmente, como também pode ser usado com máscaras do tipo "ini???fim " e "ini*fim".

RELEASE n_Numero (indivudual)
RELEASE n_NUmero, c_Texto, l_Found (lista de variáveis)
RELEASE ALL LIKE n_* (máscara)
RELEASE ALL LIKE n_Numero??? (libera n_Numero001, n_Numero999, mas não libera n_Numero9999)
RELEASE ALL EXCEPT n_Numero9999 (libera todos os n_Numero*, menos o citado)

Ou seja, dá para montar uma infinidade de opções. O limite é a nossa criatividade.
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 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 »

O erro é o mesmo

"Exception code c0000005 is the code for an access violation. That means that your program is accessing (either reading or writing) a memory address to which it does not have rights. Most commonly this is caused by:

Accessing a stale pointer. That is accessing memory that has already been deallocated. Note that such stale pointer accesses do not always result in access violations. Only if the memory manager has returned the memory to the system do you get an access violation.
Reading off the end of an array. This is when you have an array of length N and you access elements with index >=N.
To solve the problem you'll need to do some debugging. If you are not in a position to get the fault to occur under your debugger on your development machine you should get a crash dump file and load it into your debugger. This will allow you to see where in the code the problem occurred and hopefully lead you to the solution. You'll need to have the debugging symbols associated with the executable in order to see meaningful stack traces."

Seu fonte está com problemas de variaveis, mudar a versão do harbour não vai fazer seu programa criar mais memoria RAM....
Imagem
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Erro interno

Mensagem por Itamar M. Lins Jr. »

O mais importante ainda não foi informado!
A linha, função, códigos onde ocorre o erro.
Acessa alguma DLL ?, gravação em alguma porta compartilhada ?
Eu uso muitas variáveis publicas, privadas... Não tenho esse problema aqui, agora, quando ativo alguma dll, porta serial... com alguma falha da minha parte ocorre esses erros.


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
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 »

Na verdade eu informei acima que a linha do erro está só com um endif, o que me parece indicar que o problema não é no programa.

Não acesso nenhuma DLL, nem gravo em nenhuma porta compartilhada.

O erro voltou a ocorrer comigo agora:

Código: Selecionar todos

Application Internal Error - C:\agenda\AG2PLANO.EXE
Terminated at: 2013.11.22 19:52:30
Erro irrecuper vel 6005: Exception error:

    Exception Code:C0000005
    Exception Address:006F0061
    EAX:003D2F30  EBX:003D2F3C  ECX:00000010  EDX:006BD348
    ESI:00000000  EDI:0028F65C  EBP:0028F504
    CS:EIP:0023:006F0061  SS:ESP:002B:0028F4BC
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010246
    CS:EIP: 0B 59 C0 00 F9 FF FF 20 16 1F C0 00 F9 FF FF 01
    SS:ESP: 0054EC8D 003D2F3C 00000000 0000D012 00000000 00000000 00000000 B18E5BA9 00000B96 00000000 0028F60C 00554650 0028F360 B18E5BA9 00000001 FA67B90E

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    006F0061 0028F504   76697461 62642E6A 00000066 00331E04 00000000 B18E5BA9 00000B96 00000000 00000010 00000000


Modules:
0x00400000 0x002E3000 C:\agenda\AG2PLANO.EXE
0x76EE0000 0x00180000 C:\Windows\SysWOW64\ntdll.dll
0x74FD0000 0x00110000 C:\Windows\syswow64\kernel32.dll
0x764A0000 0x00047000 C:\Windows\syswow64\KERNELBASE.dll
0x76970000 0x000A0000 C:\Windows\syswow64\ADVAPI32.DLL
0x74DE0000 0x000AC000 C:\Windows\syswow64\msvcrt.dll
0x764F0000 0x00019000 C:\Windows\SysWOW64\sechost.dll
0x74CC0000 0x000F0000 C:\Windows\syswow64\RPCRT4.dll
0x74940000 0x00060000 C:\Windows\syswow64\SspiCli.dll
0x74930000 0x0000C000 C:\Windows\syswow64\CRYPTBASE.dll
0x74B40000 0x00090000 C:\Windows\syswow64\GDI32.dll
0x749A0000 0x00100000 C:\Windows\syswow64\USER32.dll
0x76EB0000 0x0000A000 C:\Windows\syswow64\LPK.dll
0x74AA0000 0x0009D000 C:\Windows\syswow64\USP10.dll
0x75E60000 0x0015C000 C:\Windows\syswow64\OLE32.dll
0x75120000 0x0008F000 C:\Windows\syswow64\OLEAUT32.DLL
0x720D0000 0x00051000 C:\Windows\system32\WINSPOOL.DRV
0x74BF0000 0x00035000 C:\Windows\syswow64\WS2_32.dll
0x761F0000 0x00006000 C:\Windows\syswow64\NSI.dll
0x76030000 0x00060000 C:\Windows\system32\IMM32.DLL
0x76A10000 0x000CC000 C:\Windows\syswow64\MSCTF.dll
0x70330000 0x0004C000 C:\Windows\system32\apphelp.dll
0x704E0000 0x00010000 C:\Windows\system32\NLAapi.dll
0x70470000 0x00010000 C:\Windows\system32\napinsp.dll
0x70450000 0x00012000 C:\Windows\system32\pnrpnsp.dll
0x71910000 0x0003C000 C:\Windows\System32\mswsock.dll
0x70790000 0x00044000 C:\Windows\system32\DNSAPI.dll
0x70440000 0x00008000 C:\Windows\System32\winrnr.dll
0x70250000 0x00027000 C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live\WLIDNSP.DLL
0x74BE0000 0x00005000 C:\Windows\syswow64\PSAPI.DLL
0x75FC0000 0x00057000 C:\Windows\syswow64\SHLWAPI.dll
0x74260000 0x0000D000 C:\Windows\system32\wshbth.dll
0x70220000 0x00021000 C:\Program Files (x86)\Bonjour\mdnsNSP.dll
0x746D0000 0x0001C000 C:\Windows\system32\Iphlpapi.DLL
0x746C0000 0x00007000 C:\Windows\system32\WINNSI.DLL
0x70400000 0x00038000 C:\Windows\System32\fwpuclnt.dll
0x703F0000 0x00006000 C:\Windows\system32\rasadhlp.dll
0x71900000 0x00005000 C:\Windows\System32\wshtcpip.dll
Mas tem uma particularidade: agora deu um erro no programa antes de acontecer esse erro interno, que foi o seguinte:

Código: Selecionar todos

Error DBFNTX/1012  Detectado índice corrompido: ativj.dbf
De fato o arquivo ativj.dbf está corrompido. Não sei por que isso acontece, mas me acontece com alguma frequência. Creio que seja devido ao fato de transferi-lo por FTP.

Mas a questão que me intriga aqui é:

1) normalmente o arquivo corrompido fica com tamanho 0, o que não é o caso agora; eu consigo tratar no programa quando o arquivo está com tamanho zero, evitando que dê erro no programa; mas, se não está com tamanho zero, como faria para tratar isso no programa, evitando o erro?

2) mesmo estando o arquivo corrompido e não havendo tratamento disso no programa, isso geraria um erro normal de execução no programa, mas por que esse erro interno relacionado à memória? Como evitar isso?
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Erro interno

Mensagem por Itamar M. Lins Jr. »

Bem, já temos por onde começar.
Quando for copiar esse arquivo via ftp, vc precisa se certificar que ninguém está usando ele.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
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 »

Essa verificação já é feita, mas mesmo assim, de vez em quando, a transferência gera erro no arquivo.

Mas a questão que mais está me intrigando aqui é esse erro interno. Isso é que eu queria entender o porquê. Não é só nesta circunstância de arquivo corrompido que está ocorrendo esse erro.
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Erro interno

Mensagem por Itamar M. Lins Jr. »

Antes de copiar via FTP, copie os arquivo p/ uma pasta temporária tipo c:\transf_ftp\*.DBF, DBT... assim vc garante que os arquivos estão protegidos.
Inclusive vc pode zipar tudo e manda em um único arquivo.


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Erro interno

Mensagem por Hasse »

Boa tarde colegas.

Na Internet:
http://www.windowsbbs.com/legacy-window ... ation.html
Hi,
"Exception code: C0000005 ACCESS_VIOLATION" seems to be a common experience. It appears that many people believe that it is related to the program which happen to cause the error, but there seem to be an awful lot of different programs causing it, thus it must be a more generic problem.

I cannot find a definition of WHEN and WHY would Windows respond with this message, this seems to be important to understand where the common thread is, as so different programs cause the same message.

I believe now that
- it is NOT related to any program per se
- it is related to how windows handles certain features
- it appears to happen more frequently when a MS-based file is imported or copy/pasted to a non-MS application


Anyhow, I am interested if someone has come across an explanation or even solution.

best
Werner
Ajuda ???
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)
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, faz sentido sim. De fato eu já constatei que, em algumas vezes em que ocorreu esse erro, havia mais de uma instância do programa aberta. Não tenho como afirmar que é isso que está causando o erro, porque também já vi que o erro também ocorre mesmo quando não há mais de uma instância aberta.

O problema de mais de uma instância do programa aberta ocorre porque eu ainda não achei uma forma eficaz de verificar se o programa já está aberto. Já tentei com fopen(), mas não funcionou bem. Atualmente uso a técnica de criar um arquivo ao abrir o programa e excluí-lo ao fechar, mas isso também não funciona muito bem.
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 »

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 »

Acho que esse IsProcessRunning resolveria meu problema. O problema é que não sei usá-lo. Teria que chamar com API do Windows? Não sei bem como fazer isso.
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 »

Se utilizarmos esta função, tem o perigo de erro, seria melhor utilizar um outro aplicativo, talvez escrito em C ou C++... onde você verifica se existe algum processo já existente em execução com o nome do seu exe, se tiver, o seu app retorna 1 e seu programa em harbour fecha, caso contrario, continua a execução do programa...
Imagem
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Erro interno

Mensagem por sygecom »

Veja o post abaixo, tem um exemplo que funciona bem para evitar abertura de mais de uma vez o EXE.
viewtopic.php?f=4&t=10061&hilit=StatusExe

Outra coisa que poder ser que no xHarbour acontecia seguido comigo e tirei fora foi o uso de MT( Multi-theread ) em conjunto com LIB's que não eram compatíveis com MT, ai de vez em quando dava erros desse tipo sem explicação.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Erro interno

Mensagem por Eolo »

O problema de mais de uma instância do programa aberta ocorre porque eu ainda não achei uma forma eficaz de verificar se o programa já está aberto. Já tentei com fopen(), mas não funcionou bem. Atualmente uso a técnica de criar um arquivo ao abrir o programa e excluí-lo ao fechar, mas isso também não funciona muito bem.
EM TEMPO:
dá uma conferida se o MODE que vc usou com o FOPEN() foi o 18 - que é a soma de 2 (read and write) e 16 (excluvisve)
CJP, eu uso uma solução simples que funciona efetivamente em qualquer Windows, 32 ou 64, rede ou mono, sem precisar inventar muito.

Faço o EXE abrir um arquivo qualquer (eu batizei de ".ACS", pode ser qualquer extensão), com o FOPEN(), em modo exclusivo. Se o mesmo EXE (ou qualquer outro) tentar fazer o mesmo, não consegue. E, quando sair do EXE - ou o EXE abortar por qualquer razão, o Windows libera o TXT para ser usado por outra instância.

Resumi o code ao que interessa. Agora é adaptar ao jeitão de cada sistema.

Código: Selecionar todos

arq="c:\qualquernome.acs"
if !file(arq)
  arqh=fcreate(arq,0)
  if !arqh>0
    * incapaz de abrir arquivo
    quit
  endi
  txt="Qualquer coisa"
  txt_t=fwrite(arqh,txt)
  if !txt_t=len(txt)
    * incapaz de iniciar acesso
    quit
  endi
  fclose(arqh)
endi
grab=fopen(arq,18) ///////////////////// modo exclusivo, em rede
if !grab>0
  * EXE já está em uso (outra janela ou outro usuário)
  quit
endi
* ninguém mais usa este EXE
*...
fclose(arqh)
* EXE liberado pra ser usado...
Se você, por uma questão comercial, quiser dar acesso ao mesmo EXE a mais de um usuário – digamos no máximo 5, é só criar 5 arquivos “ACS” no servidor. Cada instância vai bloquear um deles (é só fazer um for next, com um temporizador etc., para escolher um disponível) e, se um 6o. usuário tentar entrar, não vai conseguir.
Responder