JNA should include std::exception::what() in thrown `java.lang.Error`
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 25/100
Rechercherichtung
Beginne beim Binding-Pfad von Native.loadLibrary und verfolge, wie aus einer nativen std::exception ein java.lang.Error wird. Vergleiche diesen Pfad mit dem InvocationMapper- und GetLastError-Workaround des Issues. Als abgeschlossen gilt die Arbeit, wenn der ausgelöste Fehler std::exception::what() enthält, statt nur einen ungültigen Speicherzugriff zu melden, und das Verhalten anhand des Windows-Beispiels überprüft wurde.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- Java
- Sterne
- 8.9k
- Forks
- 1.7k
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus java-native-access/jna
-
Incorrect mapping of c.s.j.platform.unix.solaris.LibKstat.KstatCtlEvtl. vergeben @dbwiddis hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
java-native-access/jna#1740 · 1 Kommentar ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 66/100
java-native-access/jna#1738 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
java-native-access/jna#1736 ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 65/100
java-native-access/jna#1717 ·
-
Windows32Exception - The parameter is incorrectEvtl. wieder frei @marktech0813 hat das vor 331 Tagen übernommen, und es ist kein Pull Request offen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
java-native-access/jna#1700 · 11 Kommentare ·
Alle Issues in java-native-access/jna
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
-
C21 publishes `reactivemongo/core/SSL` as Java 23 bytecode — TLS connections fail on any JDK < 23Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
ReactiveMongo/ReactiveMongo#1520 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
liquid-java/liquidjava#373 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
ga4gh/phenopacket-schema#465 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
NationalSecurityAgency/ghidra#9748 ·
Maintainer antworten meist innerhalb von 1 Tag