tutorial nazareno ejemplos descargar java dll jni

nazareno - depurar un dll desde java java-> jni.dll-> app.dll-> app.dll



jni nazareno (5)

¿Cómo puedo depurar un dll que no está cargado por la aplicación java?

El escenario es el siguiente: mi aplicación java está cargando el jni.dll que está usando otro dll y ese dll está usando otro dll.

java <-> jni.dll <-> dll <-> dll

Tengo el código fuente de todos los módulos

Estoy usando Visual Studio Express para depurar el jni.dll, pero ¿qué debo hacer para poder depurar los otros dlls?


En Visual Studio puedes adaptar el depurador a un proceso Java en ejecución. Cuando se llega a un punto de interrupción en el código C ++, el depurador lo mostrará en el estudio visual y detendrá el proceso.

Por el momento no tengo instalado Visual Studio, pero en las opciones de depuración hay una ventana donde se pueden ver todos los procesos en ejecución. Busque el proceso de Java y agregue el proceso a la sesión de depuración.

Cuando el DLL ejecute la línea en la que se coloca el punto de interrupción, lo verá.

EDITAR: El DLL que tiene que compilar con información de depuración y no en modo de lanzamiento, de lo contrario, el desempañador en Visual Studio no se detendrá en el punto de interrupción.


Ha pasado mucho tiempo desde la última vez que hice esto, e incluso entonces fue en Linux y Solaris. Una solución incompleta es incorporar "puntos de interrupción codificados" en su archivo DLL con " _asm int 3; " _asm int 3;

Cada vez que Windows ejecuta esta instrucción, le da al usuario del escritorio la oportunidad de adjuntar un depurador adecuadamente configurado para el proceso afectado.

No es tan fácil como apuntar un depurador a un ID de proceso conocido, pero debería hacerlo funcionar.

METRO.



Una manera simple de hacerlo es crear un bucle infinito en el dll que desea depurar como:

int x = 1;
while(x);

Una vez que la aplicación Java ingrese a este ciclo, conéctelo a este proceso a través de un depurador y establezca el valor de x en 0 para romper el ciclo y ahora puede pasar usando el depurador.


pero esto es lo mismo.

Yo hago lo mismo, así que permítanme explicar mi conjunto de trabajo.

Estoy usando eclipse 3.1 y Visual C ++ 2003 7.1.3088 (alemán ... lo siento;)) y Windows XP. Cargo some_jni.dll y some.dll en Java y uso las clases jni. some.dll carga internamente other.dll. Puedo depurar some.dll y other.dll en Visual Studio.

Comience su aplicación y ponga un punto de interrupción a la primera llamada de la clase jni. Abra VS y vaya a (en alemán) "Debuggen" (Depuración) -> "Prozesse" (Procesos) Su verá el javaw.exe

Seleccione javaw.exe y presione "Anfügen" (Adjuntar).

Cuando recuerdo, la página de códigos en C ++ donde se coloca el punto de interrupción debe estar abierta en VS. VS no abrirá la página cuando se llegue al punto de interrupción automáticamente. Cuando se carga la dll y se ejecuta la línea de código donde pones un punto de interrupción, el depurador en VS se detendrá en esta posición. Aviso: ¡esto solo ocurrirá cuando compile el archivo DLL con el que desea depurar con opciones de depuración! de lo contrario, el depurador no se detendrá en el punto de interrupción de C ++.

Lo hice hace medio año, pero deberían ser los pasos correctos.

Espero que lo entiendas