2008-12-11 5 views
5

comment puis-je déboguer une DLL qui n'est pas chargée par l'application Java.déboguer une DLL de java java-> jni.dll -> app.dll -> app.dll

Le scénario est la suivante: mon application java charge le jni.dll qui utilise une autre dll et que dll utilise une autre dll.

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

J'ai le code source pour tous les modules

J'utilise visual studio exprimer lors du débogage du jni.dll mais ce qui devrait Je fais pour pouvoir déboguer les autres DLL?

Répondre

0

Il a été longtemps depuis que je l'ai fait, et même alors, il était sous Linux & Solaris. Chaque fois que Windows exécute cette instruction, l'utilisateur de bureau a la possibilité d'attacher un débogueur configuré de manière appropriée au processus affecté.

Ce n'est pas aussi simple que de pointer un débogueur vers un ID de processus connu, mais cela devrait vous aider à démarrer.

M.

1

Dans Visual Studio, vous pouvez adapter le débogueur à un processus java en cours d'exécution. Quand un point d'arrêt dans le code C++ est atteint, le débogueur le montrera dans le studio visuel et arrêtera le processus.

Actuellement, je n'ai pas visual studio installé, mais dans les options de débogage est une fenêtre dans laquelle vous pouvez voir tous les processus en cours d'exécution. Recherchez le processus Java et ajoutez le processus à la session de débogage. Lorsque la DLL exécutera la ligne dans laquelle le point d'arrêt est placé, vous le verrez. Le dll que vous devez compiler avec les informations de débogage et pas en mode release, sinon le debuger dans visual studio ne s'arrêtera pas au breakpoint!

8

mais c'est pareil.

Je fais la même chose, alors laissez-moi vous expliquer mon ensemble de travail.

J'utilise Eclipse 3.1 et Visual C++ 2003 7.1.3088 (allemand ... désolé;)) et Windows XP. Je charge some_jni.dll et some.dll en Java et en utilisant les classes jni. some.dll charge internaly other.dll. Je peux déboguer some.dll et other.dll dans Visual Studio.

Démarrez votre application et mettez un point d'arrêt au premier appel de classe jni. Open VS et aller à (en allemand) "Debuggen" (Débogage) -> "Prozesse" (Processus) Leur vous verrez le javaw.exe

Sélectionnez le javaw.exe et appuyez sur "Anfügen" (Attacher) .

Quand je remeber, la page de code C++ wher le point d'arrêt est placé doit être ouvert dans VS. VS n'ouvrira pas la page lorsque le point d'arrêt est touché automatiquement. Lorsque la DLL est chargée et que la ligne de code dans laquelle vous placez un point d'arrêt est exécutée, le débogueur dans VS s'arrête à cette position. Remarque: cela n'arrivera que lorsque vous compilerez la DLL que vous voulez déboguer avec les options de débogage !!! sinon, le débogueur ne s'arrêtera pas au point d'arrêt C++.

Je l'ai fait il y a un an et demi, mais cela devrait être les bonnes mesures.

Il espère que vous l'obtenez.

0

Une façon brute de faire est de créer une boucle infinie dans la dll que vous voulez déboguer comme:

int x = 1;
while(x);

Une fois que l'application Java pénètre dans cette boucle attache à ce processus par un débogueur et un ensemble la valeur de x à 0 pour casser la boucle et maintenant vous pouvez passer à travers l'utilisation du débogueur.

Questions connexes