JNA should include std::exception::what() in thrown `java.lang.Error`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
Línea de trabajo
Comienza en la ruta de binding de Native.loadLibrary y rastrea cómo una std::exception nativa se convierte en java.lang.Error. Compara esa ruta con el workaround de InvocationMapper y GetLastError del issue. Se considera terminado cuando el error lanzado incluye std::exception::what() en lugar de informar únicamente de un acceso de memoria no válido, y el comportamiento se ha comprobado con el ejemplo de Windows.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Java
- Estrellas
- 8.9k
- Forks
- 1.7k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de java-native-access/jna
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
java-native-access/jna#1740 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 66/100
java-native-access/jna#1738 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
java-native-access/jna#1736 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
java-native-access/jna#1717 ·
-
Windows32Exception - The parameter is incorrectQuizá libre de nuevo @marktech0813 la tomó hace 331 días y no hay ningún pull request abierto. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
java-native-access/jna#1700 · 11 comentarios ·
Todos los issues de java-native-access/jna
Issues similares
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
waiting-for-triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
spring-cloud/spring-cloud-openfeign#1443 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 84/100
ADORSYS-GIS/keycloak-oid4vp-plugin#221 ·
Los mantenedores suelen responder en 2 días
-
Upgrade to Spring Pulsar 2.0.8Abiertostatus: team-only type: dependency-upgrade
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
spring-projects/spring-boot#52099 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
tchiotludo/akhq#3307 · 1 reacción ·
Los mantenedores suelen responder en 1 día