JNA should include std::exception::what() in thrown `java.lang.Error`
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 25/100
Direzione di ricerca
Inizia dal percorso di binding di Native.loadLibrary e traccia come una std::exception nativa diventa java.lang.Error. Confronta quel percorso con la soluzione alternativa dell'issue basata su InvocationMapper e GetLastError. Il lavoro è completato quando l'errore lanciato include std::exception::what() invece di riportare soltanto un accesso alla memoria non valido, con il comportamento verificato rispetto all'esempio per Windows.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
As a caller of a cpp hunk of math I want std::exceptions to be nicely translated by JNA across the bindings so that I can more easily debug runtime problems.
I have some cpp code that I've updated to throw std::exception's that contain valuable data in their what() clause. What I was hoping JNA would do is this:
//mylib.dll
#include <exception>
extern "C" __declspec(dllexport)
const void MYCOMPANY_compute_eigen_values_or_something()
{
throw std::exception("message from native code: kablamo!")
}
interface MyLib: Library {
public void MYCOMPANY_compute_eigen_values_or_something()
}
var lib = Native.loadLibrary("mylib", MyLib.class, options)
try { lib.MYCOMPANY_compute_eigen_values_or_something() }
catch(Throwable ex){
System.out.println(ex)
}
expected: java.lang.Error: In native code: message from native code: kablamo!
actual: java.lang.Error: Invalid memory access
... on: Windows 10 1903, JNA 4.2.2
My work around:
Wrap my code in a try { } catch { }, save it to a global variable, and expose a function GetLastError() that I then call from the handler. If you combine this with StackWalker you can even get a java--ish native code stack trace in your preconditions/postconditions. From the java side, I add my own InvocationMapper to catch JNA thrown java.lang.Errors, call GetLastError() then throw a new exception with the results.
- Lingua principale
- Java
- Stelle
- 8.9k
- Fork
- 1.7k
- Merge medio
- 1g 13h
- PR unite (30g)
- 1
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di java-native-access/jna
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 66/100
java-native-access/jna#1738 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
java-native-access/jna#1736 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
java-native-access/jna#1717 ·
-
Windows32Exception - The parameter is incorrectForse già presa @marktech0813 l’ha presa 332 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
java-native-access/jna#1700 · 11 commenti ·
-
feature request
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
java-native-access/jna#1698 · 1 commento ·
Tutte le issue di java-native-access/jna
Issue simili
-
[Bug] The producer summary counts an unreported client version as a second version and warns about a version mixForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
apache/rocketmq-dashboard#6110 ·
I maintainer di solito rispondono entro 4 giorni
-
`Processing lsp` never exits and leaves orphaned processesForse già presa @overcast302 l’ha presa oggi. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
processing/processing4#1578 · 1 commento ·
-
ASM is not up-to-dateAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 60/100
I maintainer di solito rispondono entro 1 giorno
-
[BUG] S3 CORS responses omit Access-Control-Allow-Credentials for matched originsForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
floci-io/floci#5369 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
securityHeaders replaces a route's own Content-Security-Policy (0.9.9; weakens embedders' pages)Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno