Programa em Java "morre" do nada

Olá a todos!

Seguinte, tem um programa que foi desenvolvido em Java + Firebird na própria empresa onde trabalho. O programa serve para fazer cadastro de clientes, gerar relatórios em PDF, gráficos, e etc. O programa acessa uma base Firebird em outra máquina da rede.

O rapaz que trabalha com o programa vem reclamando que o programa cai “do nada”, e um dia ele me mostrou um erro absurdo nos dados de clientes. Ele disse que foi apenas adicionar um cliente, e o programa fez uma espécie de “sort” entre os dados dos clientes. Era telefone de um cliente aparecendo no outro, e-mail de um cliente aparecendo em outro, e etc. Ele ficou bem preocupado; eu imaginei que o programa não teria feito nenhuma alteração no banco, e que o problema era na GUI. Reiniciei o programa, e os dados estavam corretos, na ordem certa.

Enfim chegou o dia que eu temia: me passaram o programa para arrumar. Entretanto, eu não consigo simular o erro de jeito nenhum, todas as inserções, remoções, enfim, todos os casos de uso do programa funcionam perfeitamente. Não sei nem como começar, nenhuma estratégia inicial para “consertar” o programa.

Alguém tem algum ponto de partida?

Obrigado, abração!!

E ae karinha, blz?! Já passei por isso e sei como é complicado.

Primeiro, monta o ambiente na sua máquina.
Segundo, pega a base da produção e joga na sua máquina.

Monta o ambiente na sua máquina igualzinho da produção.

Chama a pessoa que usa o sistema para simular o erro na sua máquina e manda reproduzir oque ele faz. Pede pra ele fazer igualzinho como ele fez pra dar erro.

Com o erro identificado, coloca um break point no ponto de partida da onde gera o erro e vai debugando.

Só tenta detalhar como seu sistema foi desenvolvido, “Struts”, “Spring”, “JPA”, “Hibernate”… essas coisas.

Abs();

Quando programas Java morrem “do nada” e não é por um erro de programação, pode ser que você encontre um arquivo com um nome parecido com “hs_err_algumacoisa”. Por exemplo, hs_err_20029.pid. ou coisa parecida. Esses arquivos costumam ficar no diretório do usuário.

http://www.stottmeister.com/blog/2009/03/18/description-of-java-hs_err-error-log-files/

Oi, Lenin666 e entanglement,

Fiz exatamente o que os sres me pediram. Instalei o Firebird 2.1, instalei também o IB Expert, para fazer consultas SQL na base do Firebird, e peguei a base do programa e coloquei tudo na minha máquina.
Mas, não consegui simular o erro de jeito nenhum. Pedi ao cara para tentar simular, e nada.

Então, olhei na pasta onde fica o .jar na máquina do cara, e estava apinhado de logs, como o entanglement disse, todos de nome hs_err_pidxxxx.log. Todos os logs são muito parecidos, e estou postando um deles abaixo:


#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d8094dd, pid=416, tid=3056
#
# JRE version: 6.0_20-b02
# Java VM: Java HotSpot(TM) Client VM (16.3-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# V  [jvm.dll+0x94dd]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x02bea000):  VMThread [stack: 0x02cd0000,0x02d20000] [id=3056]

siginfo: ExceptionCode=0xc0000005, reading address 0x343b47b0

Registers:
EAX=0x36f297a4, EBX=0x36f297a4, ECX=0x00000003, EDX=0x6da14ed8
ESP=0x02d1fb58, EBP=0x02d1fb5c, ESI=0x343b47b0, EDI=0x36f29720
EIP=0x6d8094dd, EFLAGS=0x00010202

Top of Stack: (sp=0x02d1fb58)
0x02d1fb58:   00000018 02d1fb74 6d89e0ca 36f297a4
0x02d1fb68:   371d9bd0 00000002 03010008 02d1fb94
0x02d1fb78:   6d95dea6 36f29720 6da54b8c 37190508
0x02d1fb88:   0038bc58 6d95e2f2 6da54b8c 02d1fba8
0x02d1fb98:   6d9e1ff4 6da6cae8 6da54b8c 0038bc58
0x02d1fba8:   02d1fbc4 6d9a1d4d 6da54b8c 00000000
0x02d1fbb8:   6da54b8c 6da54b8c 0038bc58 02d1fbe8
0x02d1fbc8:   6d8c84cf 00000001 00000002 6da54b8c 

Instructions: (pc=0x6d8094dd)
0x6d8094cd:   cc cc cc 55 8b ec 8b 45 08 56 8b 30 85 f6 74 40
0x6d8094dd:   8b 0e 83 e1 03 80 f9 03 74 36 56 e8 63 fe ff ff 


Stack: [0x02cd0000,0x02d20000],  sp=0x02d1fb58,  free space=13e02d1f6cck
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [jvm.dll+0x94dd]
V  [jvm.dll+0x9e0ca]
V  [jvm.dll+0x15dea6]
V  [jvm.dll+0x1e1ff4]
V  [jvm.dll+0x1a1d4d]
V  [jvm.dll+0xc84cf]
V  [jvm.dll+0xca15c]
V  [jvm.dll+0xca520]
V  [jvm.dll+0xce57a]
V  [jvm.dll+0x1d8762]
V  [jvm.dll+0xc94b8]
V  [jvm.dll+0x7e7cb]
V  [jvm.dll+0x1f45ab]
V  [jvm.dll+0x1f7043]
V  [jvm.dll+0x1f62de]
V  [jvm.dll+0x1f662c]
V  [jvm.dll+0x1f6a52]
V  [jvm.dll+0x17f96c]
C  [msvcr71.dll+0x9565]
C  [kernel32.dll+0xb683]

VM_Operation (0x0330d840): GenCollectForAllocation, mode: safepoint, requested by thread 0x03036000


---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x03157400 JavaThread "Image Fetcher 0" daemon [_thread_blocked, id=3932, stack(0x03310000,0x03360000)]
  0x00386800 JavaThread "DestroyJavaVM" [_thread_blocked, id=292, stack(0x003b0000,0x00400000)]
  0x030f7c00 JavaThread "Thread-3" [_thread_blocked, id=688, stack(0x035b0000,0x03600000)]
  0x030b3800 JavaThread "TimerQueue" daemon [_thread_blocked, id=2792, stack(0x033b0000,0x03400000)]
  0x03036000 JavaThread "AWT-EventQueue-0" [_thread_blocked, id=3940, stack(0x032c0000,0x03310000)]
  0x02fe0800 JavaThread "AWT-Windows" daemon [_thread_in_native, id=4004, stack(0x03230000,0x03280000)]
  0x02fdf800 JavaThread "AWT-Shutdown" [_thread_blocked, id=3912, stack(0x031e0000,0x03230000)]
  0x03028c00 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=912, stack(0x03190000,0x031e0000)]
  0x02bfdc00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=4080, stack(0x02eb0000,0x02f00000)]
  0x02bf7400 JavaThread "CompilerThread0" daemon [_thread_blocked, id=752, stack(0x02e60000,0x02eb0000)]
  0x02bf5c00 JavaThread "Attach Listener" daemon [_thread_blocked, id=4068, stack(0x02e10000,0x02e60000)]
  0x02bf4800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=3560, stack(0x02dc0000,0x02e10000)]
  0x02bf0000 JavaThread "Finalizer" daemon [_thread_blocked, id=3644, stack(0x02d70000,0x02dc0000)]
  0x02beb400 JavaThread "Reference Handler" daemon [_thread_blocked, id=3356, stack(0x02d20000,0x02d70000)]

Other Threads:
=>0x02bea000 VMThread [stack: 0x02cd0000,0x02d20000] [id=3056]
  0x02bffc00 WatcherThread [stack: 0x02f00000,0x02f50000] [id=3936]

VM state:at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread:  ([mutex/lock_event])
[0x003858a0] Threads_lock - owner thread: 0x02bea000
[0x00385cb0] Heap_lock - owner thread: 0x03036000

Heap
 def new generation   total 4736K, used 302K [0x22970000, 0x22e90000, 0x27c10000)
  eden space 4224K,   0% used [0x22970000, 0x22970000, 0x22d90000)
  from space 512K,  59% used [0x22e10000, 0x22e5bbd8, 0x22e90000)
  to   space 512K,   0% used [0x22d90000, 0x22d90000, 0x22e10000)
 tenured generation   total 12224K, used 11591K [0x27c10000, 0x28800000, 0x32170000)
   the space 12224K,  94% used [0x27c10000, 0x28761dd0, 0x28761e00, 0x28800000)
 compacting perm gen  total 12288K, used 4298K [0x32170000, 0x32d70000, 0x36170000)
   the space 12288K,  34% used [0x32170000, 0x325a2b18, 0x325a2c00, 0x32d70000)
    ro space 10240K,  51% used [0x36170000, 0x3669ae00, 0x3669ae00, 0x36b70000)
    rw space 12288K,  54% used [0x36b70000, 0x372072d8, 0x37207400, 0x37770000)

Dynamic libraries:
0x00400000 - 0x00424000 	D:\Arquivos de programas\Java\jre6\bin\javaw.exe
0x7c900000 - 0x7c9b4000 	C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c8ff000 	C:\WINDOWS\system32\kernel32.dll
0x77f50000 - 0x77ffb000 	C:\WINDOWS\system32\ADVAPI32.dll
0x77db0000 - 0x77e41000 	C:\WINDOWS\system32\RPCRT4.dll
0x7e360000 - 0x7e3f0000 	C:\WINDOWS\system32\USER32.dll
0x77e50000 - 0x77e97000 	C:\WINDOWS\system32\GDI32.dll
0x76360000 - 0x7637d000 	C:\WINDOWS\system32\IMM32.DLL
0x7c340000 - 0x7c396000 	D:\Arquivos de programas\Java\jre6\bin\msvcr71.dll
0x6d800000 - 0x6da97000 	D:\Arquivos de programas\Java\jre6\bin\client\jvm.dll
0x76b20000 - 0x76b4e000 	C:\WINDOWS\system32\WINMM.dll
0x6d7b0000 - 0x6d7bc000 	D:\Arquivos de programas\Java\jre6\bin\verify.dll
0x6d330000 - 0x6d34f000 	D:\Arquivos de programas\Java\jre6\bin\java.dll
0x6d290000 - 0x6d298000 	D:\Arquivos de programas\Java\jre6\bin\hpi.dll
0x76bd0000 - 0x76bdb000 	C:\WINDOWS\system32\PSAPI.DLL
0x6d7f0000 - 0x6d7ff000 	D:\Arquivos de programas\Java\jre6\bin\zip.dll
0x6d000000 - 0x6d14a000 	D:\Arquivos de programas\Java\jre6\bin\awt.dll
0x72fb0000 - 0x72fd6000 	C:\WINDOWS\system32\WINSPOOL.DRV
0x77bf0000 - 0x77c48000 	C:\WINDOWS\system32\msvcrt.dll
0x774c0000 - 0x775fd000 	C:\WINDOWS\system32\ole32.dll
0x773b0000 - 0x774b3000 	C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\COMCTL32.dll
0x77ea0000 - 0x77f16000 	C:\WINDOWS\system32\SHLWAPI.dll
0x6d230000 - 0x6d284000 	D:\Arquivos de programas\Java\jre6\bin\fontmanager.dll
0x746e0000 - 0x7472b000 	C:\WINDOWS\system32\MSCTF.dll
0x75290000 - 0x752be000 	C:\WINDOWS\system32\msctfime.ime
0x7c9c0000 - 0x7d1dc000 	C:\WINDOWS\system32\shell32.dll
0x6d610000 - 0x6d623000 	D:\Arquivos de programas\Java\jre6\bin\net.dll
0x71a70000 - 0x71a87000 	C:\WINDOWS\system32\WS2_32.dll
0x71a60000 - 0x71a68000 	C:\WINDOWS\system32\WS2HELP.dll
0x6d630000 - 0x6d639000 	D:\Arquivos de programas\Java\jre6\bin\nio.dll
0x20b00000 - 0x20b4b000 	C:\WINDOWS\system32\imon.dll
0x71a90000 - 0x71a9a000 	C:\WINDOWS\system32\WSOCK32.dll
0x20c00000 - 0x20c0d000 	C:\Arquivos de programas\Eset\pr_imon.dll
0x71a10000 - 0x71a50000 	C:\WINDOWS\system32\mswsock.dll
0x60b30000 - 0x60b88000 	C:\WINDOWS\system32\hnetcfg.dll
0x71a50000 - 0x71a58000 	C:\WINDOWS\System32\wshtcpip.dll
0x76f00000 - 0x76f27000 	C:\WINDOWS\system32\DNSAPI.dll
0x76f90000 - 0x76f98000 	C:\WINDOWS\System32\winrnr.dll
0x76f40000 - 0x76f6d000 	C:\WINDOWS\system32\WLDAP32.dll
0x76fa0000 - 0x76fa6000 	C:\WINDOWS\system32\rasadhlp.dll

VM Arguments:
java_command: D:\Publicidade\dist\Publicidade.jar
Launcher Type: SUN_STANDARD

Environment Variables:
CLASSPATH=C:\Arquivos de programas\Borland\InterBase\InterClient\interclient.jar
PATH=E:\oracle\product\10.2.0\db_1\bin;c:\oracle\product\10.2.0\client_1;C:\Arquivos de programas\Borland\Delphi7;C:\Arquivos de programas\Borland\Delphi7\Projects\Bpl\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\Programas\GTK\2.0\bin;
USERNAME=zeus
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 2, AuthenticAMD



---------------  S Y S T E M  ---------------

OS: Windows XP Build 2600 Service Pack 2

CPU:total 1 (1 cores per cpu, 1 threads per core) family 6 model 6 stepping 2, cmov, cx8, fxsr, mmx, sse, mmxext, 3dnow, 3dnowext

Memory: 4k page, physical 1015140k(524828k free), swap 2449324k(1769932k free)

vm_info: Java HotSpot(TM) Client VM (16.3-b01) for windows-x86 JRE (1.6.0_20-b02), built on Apr 12 2010 13:52:23 by "java_re" with MS VC++ 7.1 (VS2003)

time: Mon Jun 14 15:53:35 2010
elapsed time: 181 seconds

Me parece que a JVM está tentando acessar um endereço baixo, coisa que eu nunca imaginei que ela faria em hipótese alguma… :?

Enfim, a solução mais óbvia que eu posso imaginar é instalar a última versão da JVM e torcer para que não aconteça mais, mas antes, gostaria da opinião dos sres, para saber se o problema não pode ter sido causado por alguma outra coisa.

Muito obrigado!

[quote=wind]# JRE version: 6.0_20-b02

Java VM: Java HotSpot™ Client VM (16.3-b01 mixed mode, sharing windows-x86 )

[/quote]

Hum… olhando o log, é a última versão :frowning:

Ele tem algum antivirus esquisito, por exemplo? Ou alguma solução de segurança como o SCUA? Isso é meio chatinho de resolver.

Você pode tentar ver se o último Windows Update foi instalado, já que ele menciona ter carregado o arquivo "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\COMCTL32.dll " mas a versão mais nova é “C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll”. Isso normalmente indica que o Windows Update não está muito bem atualizado (embora as atualizações automáticas do Java tenham sido feitas, porque a 6.0_20 é a última versão.)

Hmm, obrigado, entanglement, vou dar uma olhada nisso e posto os resultados em breve.

Abraço!