Ho un'applicazione Java 1.6 che accede a un modulo nativo di terze parti, attraverso una classe JNI fornita come interfaccia. Recentemente abbiamo notato che un SEGFAULT si sta verificando nel modulo nativo e sta causando il crash della nostra applicazione. È possibile catturare e gestire questo evento, almeno per registrarlo correttamente prima di morire?È possibile gestire un SEGFAULT che si origina nel codice nativo?
Ho provato entrambe le tecniche Java nell'articolo da kjp's answer. Nessuno dei due ha funzionato. Il tentativo di installare un signal handler sui risultati 'SEGV' nell'eccezione
segnale già utilizzato da VM: SEGV
Il shutdown handler ho installato non è riuscito semplicemente a sparare, presumibilmente a causa di ciò che il IBM article stati:
ganci di arresto non verranno eseguiti se metodo
Runtime.halt() viene chiamato per terminare la JVM. Runtime.halt() viene fornito per consentire un arresto rapido della JVM.
L'opzione -Xrs JVM è specificata.
La JVM esce in modo anomalo, come una condizione di eccezione o l'interruzione forzata generata dal software JVM.
Sono disponibili simboli di debug pubblici per il codice nativo? Se riesci a trovare ulteriori informazioni sul motivo per cui sta accadendo, potresti essere in grado di inviare una segnalazione di bug abbastanza completa da indurli a correggere la loro biblioteca. – Benj
@ Benj Lavorando su questo in parallelo. Avranno più informazioni di quanto vogliono. Speravo di avere un piano di backup. –
Su quale sistema operativo si sta eseguendo? – Benj