PDA

Visualizza la versione completa : [Java/C++] Debug JNI


tiduslion
18-11-2012, 15:32
Salve,
ho un problema che mi affligge da 2 giorni e che non riesco a risolvere...
Ho un applicazione scritta in Java e C++ e la comunicazione avviene tramite JNI.

Adesso ho concluso la scrittura di entrambe le parti, in c++ creo una dll che viene caricata da Java.
Il problema che durante l'esecuzione mi viene lanciato il seguente errore:



#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x51185df9, pid=4508, tid=4604
#
# JRE version: 7.0_02-b13
# Java VM: Java HotSpot(TM) Client VM (22.0-b10 mixed mode windows-x86 )
# Problematic frame:
# C [indexMTreeShiatsuShot.dll+0x5df9]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\david\Desktop\Sviluppo\NetBeansProjects\W indsurfVideo\hs_err_pid4508.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#


Sospetto che sia un errore nella parte in C++ del progetto solo che senza un debug non riesco a capire dove.

Sto usando netbeans 7.2 su un sistema Win7 a 64bit

C' per caso un modo per fare il debug delle chiamate native ?


Grazie

MItaly
18-11-2012, 16:18
Da un debugger nativo (es. Visual Studio o WinDbg) devi fare "attach to process" ("collega al processo" o roba del genere) sul processo di Java prima che arrivi alla parte critica. O anche, lanciare direttamente il processo di Java dal debugger nativo.
Per capirci qualcosa per:
- o usi la versione debug della dll;
- o quantomeno, se il crash avviene solo con la versione release, devi abilitare la generazione dei simboli di debug (il file .pdb), altrimenti il debugger non ci capisce niente (anche se anche con il pdb fare il debug di binari ottimizzati spesso un casino).

tiduslion
19-11-2012, 12:53
ok, ho capito che con il solo netbeans non si riesce...
adesso il problema il seguente, ho scaricato Windbg il problema che non so che passi eseguire per fargli fare il debug lato c++

MItaly
19-11-2012, 15:17
Originariamente inviato da tiduslion
adesso il problema il seguente, ho scaricato Windbg il problema che non so che passi eseguire per fargli fare il debug lato c++
Devi dirgli di agganciarsi al processo java in esecuzione; il problema che WinDbg non molto intuitivo da utilizzare ( sostanzialmente un frontend "leggero" al debugger a linea di comando di Windows). Con VS sarebbe sicuramente un po' pi semplice (vedi qui (http://www.codeproject.com/Articles/69965/Debugging-a-JNI-Application-using-Netbeans-and-Vis)).

Loading