Quelle est la communication entre Eclipse et mon serveur d'applications (JBoss) lorsque j'exécute le serveur à partir d'Eclipse en mode de débogage? Comment cela marche-t-il?Comment Eclipse débogue-t-il du code dans un serveur d'applications?
Répondre
Lorsque vous démarrez le serveur en mode débogage, il écoute sur un port TCP spécifié. Eclipse se connecte à ce port et parle en utilisant le Java Debug Wire Protocol (JDWP). Lisez les détails ici: http://java.sun.com/j2se/1.5.0/docs/guide/jpda/
Je pense qu'il est appelé JDWP (Java Debugging Wire Protocol) - lire la suite here
Le débogage Eclipse démarre avec ce que l'on appelle les agents. La JVM, qui exécute les sources .class conformes, dispose d'une fonctionnalité permettant d'injecter des bibliothèques externes (écrites en Java ou en C++) dans la JVM, à peu près au moment de l'exécution. Ces bibliothèques externes sont appelées Agents et ont la capacité de modifier le contenu des fichiers .class exécutés. Ces Agents ont accès aux fonctionnalités de la JVM qui ne sont pas accessibles depuis un code Java courant à l'intérieur de la JVM et peuvent être utilisées pour faire des choses intéressantes comme l'injection et la modification du code source, le profilage, etc. Des outils comme JRebel cette pièce de fonctionnalité pour réaliser leur magie.
Et pour passer un agent Lib à une machine virtuelle Java, vous le faites via des arguments de démarrage, en utilisant le
agentlib:libname[=options] format.
Nous passâmes en fait un agent Lib nommé jdwp à la machine virtuelle Java en cours d'exécution Tomcat. Le jdwp est une implémentation JVM spécifique et facultative du JDWP (Java Debug Wire Protocol) qui est utilisé pour définir la communication entre un débogueur et une JVM en cours d'exécution. C'est l'implémentation, si elle est fournie en tant que bibliothèque native de la JVM sous forme de jdwp.so ou de jdwp.dll
Alors, que fait-elle? En termes simples, l'agent jdwp que nous transmettons sert essentiellement de lien entre l'instance JVM exécutant une application et un débogueur (qui peut être situé à distance ou localement). Comme il s'agit d'une bibliothèque d'agents, elle a la capacité d'intercepter le code en cours d'exécution, de créer un pont entre la machine virtuelle Java et un débogueur et d'appliquer les fonctionnalités d'un débogueur à la machine virtuelle Java. Étant donné que dans l'architecture JVM, la fonctionnalité de débogage n'est pas trouvée dans la JVM elle-même mais qu'elle est extraite dans des outils externes (appelés correctement débogueurs), ces outils peuvent résider sur la machine locale exécutant la JVM en cours de débogage ou être courir à partir d'une machine externe. C'est cette architecture modulaire découplée qui nous permet d'avoir une JVM fonctionnant sur une machine distante et utilisant le JDWP, d'avoir un débogueur distant capable de communiquer avec elle.
Voilà comment fonctionne le débogueur Eclipse.