Brevet FR2953612A1 — publié le 20110610

Procédé de mise au point d'application logicielle, système et produit programme d'ordinateur correspondant. 1 DOMAINE DE L'INVENTION La présente invention se rapporte au domaine de la mise au point de programmes ou d'applications logicielles. La présente invention se rapporte plus particulièrement à la mise au point de programmes ou d'applications logicielles dans des environnements hétérogènes. Un programme informatique, ou une application logicielle se compose en règle générale d'un ensemble d'instructions binaires ou intermédiaires dites exécutables. Ces instructions exécutables sont usuellement issues d'une compilation d'un programme écrit dans un langage source. Ainsi, pour pouvoir créer une application logicielle, un développeur rédige un programme source écrit dans un langage de programmation spécifique. Ce programme source est ensuite compilé afin de former un programme exécutable. Au cours de cette compilation, les instructions écrites en langage source sont transformées en programme binaire qui est lui-même exécuté sur une plateforme matérielle telle qu'un ordinateur, un terminal de communication. Pour compiler un programme écrit dans un langage source pour une certaine cible (processeur, plateforme, ...), il y a quatre méthodes générales : - disposer d'un compilateur complet, c'est-à-dire comprenant une partie qui se charge de reconnaître le langage source, et une autre qui se charge de créer le programme exécutable pour la cible choisie. C'est le cas général ; - disposer d'un compilateur du langage source vers un code intermédiaire, et fournir une machine virtuelle de ce code intermédiaire sur la cible choisie. C'est le cas général pour le langage JavaTM par exemple ; - fournir, à un compilateur qui existe déjà pour la cible choisie, un module complémentaire pour reconnaître le langage source ; - disposer d'un compilateur qui transforme un programme écrit dans un langage source en un programme écrit dans un langage intermédiaire, et mettre en oeuvre un compilateur existant du langage intermédiaire pour la cible choisie. Ainsi, en dehors du cas général ci-dessus, il existe des procédures plus complexes dans lesquelles le programme source subit une succession de compilations : le programme source est par exemple compilé une première fois dans un langage intermédiaire afin de fournir un programme intermédiaire puis le programme intermédiaire est compilé dans un format binaire pour délivrer l'application binaire finale. Un tel cas de figure se présente lorsque le développeur qui rédige le programme source souhaite que l'application logicielle finale s'exécute sur une plateforme matérielle particulière ou que l'application logicielle finale présente des performances d'exécution supérieures à celles qui seraient délivrées en compilant le programme source avec un compilateur traditionnel. Les compilations successives sont également utilisées lorsque le développeur ne souhaite pas changer de plateforme de programmation malgré le fait que la plateforme sur laquelle l'application logicielle finale doit s'exécuter ne dispose pas de compilateur pour compiler un programme écrit dans un langage source donné. 2 SOLUTIONS DE L'ART ANTERIEUR Ainsi, lorsqu'un développeur souhaite créer une application logicielle qui va subir une succession de compilation (c'est-à-dire au moins deux) préalablement à l'aboutissement à un programme informatique binaire, il se pose le problème de la mise ou point (encore appelé « débogage ») de l'application. On présente, en relation avec la figure 1, le principe général de la compilation successive d'une application. Une application logicielle source (101) est rédigée par un développeur d'application. Ce programme source comprend des instructions de programme informatique écrites dans un langage de programmation source. Le programme source (101) subit une première phase de compilation par un compilateur (10) qui aboutie à sa transformation en un programme intermédiaire (102). Ce programme intermédiaire (102) est écrit dans un langage de programmation intermédiaire. A titre d'Exemple, le programme source peut être écrit dans le langage JavaTM tandis que le programme intermédiaire résultant de la première phase de compilation peut être écrit dans le langage C++ ou C. Dans le cas où un compilateur adéquat existe, le programme intermédiaire (102) subit également une phase de compilation, à l'aide d'un compilateur (20) au cours de laquelle il est transformé en un programme exécutable (103). Dans d'autres cas de figure, plusieurs phases de compilations successives peuvent être réalisées dans différents langages de programmations intermédiaires afin de fournir un programme exécutable qui satisfasse les exigences de la plateforme cible sur laquelle il doit être exécuté. Lors de telles opérations de compilation successives, les inventeurs ont constaté qu'il était extrêmement compliqué de réaliser une mise au point de l'application logicielle. En effet, classiquement, une application logicielle contient de multiples anomalies (également appelées «bug »). Ces anomalies sont généralement repérées et corrigées au cours d'une phase de tests unitaires puis au cours d'une phase dite de recette. Pour réaliser ces corrections, les développeurs sont aidés par un programme de mise au point, également appelée « débogueur ». Un débogueur est un programme qui, en lien avec le compilateur, permet de contrôler l'exécution de l'application logicielle écrite dans le langage source. L'application logicielle source à déboguer est exécutée à travers le débogueur et s'exécute normalement. Le débogueur offre alors au développeur la possibilité de contrôler l'exécution de l'application logicielle, en lui permettant par divers moyens de stopper, de mettre en pause l'exécution de l'application logicielle ou encore d'observer par exemple le contenu des différentes variables en mémoire. L'état d'exécution peut alors être observé afin, par exemple, de déterminer une cause d'une défaillance. Les débogueurs fonctionnent correctement lorsqu'une seule étape de compilation est nécessaire pour transformer une application logicielle écrit dans un langage source en une application logicielle exécutable. On présente en relation avec la figure 2, le principe général de mise en oeuvre d'un débogueur (11). Le programme source (101) est compilé, selon une méthode spécifique (DB), par le compilateur (10). Cette méthode spécifique est généralement appelée « Mode Debug ». Le développeur peut alors contrôler l'exécution du programme compilé par le débogueur (11) en visualisant, au travers une interface de mise au point du débogueur, les divers aspects du programme. Pour ce faire, le débogueur utilise les relations entre les instructions du programme source et les instructions du programme compilé que le compilateur (10) a généré selon la méthode spécifique (DB). Un problème est posé lors du déboguage des applications qui subissent plusieurs (au moins deux) compilations successives dans au moins un langage intermédiaire. Actuellement, quand un programme écrit dans un langage A est compilé vers en un programme écrit dans un langage B, puis le un programme écrit dans le langage B compilé à son tour sous une forme binaire, le débogage se fait en utilisant un débogueur dédié au langage B, et en utilisant le programme intermédiaire écrit en langage B. Pour cela le code intermédiaire doit être humainement lisible pour faciliter cette tâche, ce qui est loin d'être le cas. En effet, en règle générale, les compilateurs ne fournissent pas des programmes compilés destinés à être lu et compris par des humains. Les programmes compilés comprennent de nombreuses optimisations qui les rendent illisibles pour la plupart des développeurs. De plus, le fait de devoir utiliser un débogueur du langage intermédiaire présente au moins les deux problèmes suivants : - Le développeur du programme dans le langage source doit aussi connaître le langage intermédiaire pour déboguer le code binaire avec le débogueur du langage intermédiaire. I1 doit ensuite reporter toutes les corrections apportées au programme intermédiaire dans le programme écrit en langage source, et pour cela comprendre comment le compilateur du langage source vers le langage intermédiaire fonctionne. Cela réduit énormément le l'attrait d'une telle solution. - Le compilateur du langage source vers le langage intermédiaire doit le plus possible rendre humainement lisible la génération de son code en langage intermédiaire (même nom, même construction, ...). Cela n'est pas toujours possible parce que le langage source et le langage intermédiaire peuvent être trop sémantiquement éloigné l'un de l'autre pour assurer cette propriété. Dans tous les cas, ces contraintes influencent trop fortement la conception du compilateur, et les optimisations qu'il peut faire. Ainsi, les problèmes engendrés par les compilations multiples rendent très difficile l'emploi de débogueurs lors du développement d'applications logicielles requérant de multiples compilations intermédiaires. 3 RESUME DE L'INVENTION L'invention apporte notamment une solution nouvelle et inventive à ces problèmes de l'art antérieur. En effet l'invention propose un procédé de mise au point d'une application 15 logicielle écrite dans un langage de programmation source et exécutable sur une plateforme cible, Selon l'invention, un tel procédé comprend : - une phase de compilation de ladite application logicielle écrite dans ledit langage source délivrant le code d'une application logicielle intermédiaire 20 écrite dans un langage intermédiaire, ladite phase de compilation comprenant en outre : - une étape d'insertion au sein du code de ladite application logicielle intermédiaire, d'une construction spécifique d'interception d'événements intervenant durant l'exécution d'un programme de 25 mise au point dudit langage intermédiaire, au moyen d'instructions complémentaires ; - une étape de formatage du code intermédiaire de ladite application logicielle de sorte que la correspondance entre une ligne du code source et une ligne du code intermédiaire soit la plus fréquente 30 possible ; - une phase de compilation du code de ladite application logicielle intermédiaire en une application logicielle exécutable sur ladite plateforme cible ; - une phase de mise au point de ladite application logicielle comprenant au moins une étape de transformation d'au moins une information de mise au point entre un programme de mise au point dudit langage intermédiaire et un programme de mise au point dudit langage source. Ainsi, selon cet aspect, l'invention permet de contrôler un futur processus de déboguage du programme intermédiaire à l'aide d'instructions qui sont destinées au débogueur du programme intermédiaire. Ces instructions complémentaires, qui ne sont pas nécessaires, en tant que telles, au processus de compilation du programme écrit dans le langage de programmation intermédiaire vers la plateforme cible, permettent d'assurer un contrôle de l'exécution du programme intermédiaire lorsqu'il est lui-même en cours de déboguage. Ces instructions complémentaires permettent également de transmettre à un débogueur du programme source les informations nécessaires au débogage du programme source. Ainsi, l'invention repose sur une approche tout à fait nouvelle et inventive du déboguage d'applications logicielles dont le langage source subit des compilations successives. L'invention permet d'une part de ne pas avoir à apprendre le ou les langages intermédiaires dans lesquels le programme source est successivement compilé. D'autre part, l'invention permet de ne pas devoir déboguer l'application dans un langage intermédiaire pour réintégrer par la suite les corrections apportées dans le programme écrit en langage source. Selon un mode de réalisation particulier de l'invention, ladite phase de compilation comprend en outre une étape de génération d'au moins une représentation spécifique de ladite application logicielle au sein d'une structure de données intermédiaire et ladite phase de mise au point met en oeuvre ladite structure de données intermédiaire. Ainsi, l'invention permet de construire une structure de données qui va pouvoir servir à la mise au point en indiquant, dans cette structure de données intermédiaire, les informations qui pourraient être utiles au débogueur passerelle pour améliorer ou faciliter la mise au point à partir du débogueur du langage source. Selon une caractéristique particulière de l'invention ladite phase de mise au point comprend : - une étape de réception, en provenance dudit programme de mise au point dudit langage source, d'une requête d'obtention d'au moins une donnée ne dépendant pas de l'exécution de ladite application logicielle, dite donnée statique ; - une étape de recherche de ladite au moins une donnée statique dans ladite structure de données intermédiaires ; - une étape de transmission de ladite au moins une donnée statique à destination dudit programme de mise au point dudit langage source. Ainsi, le débogueur passerelle qui met en oeuvre le procédé de l'invention peut gérer les requêtes statiques qu'il intercepte en provenance du programme de mise au point du langage source. Selon un mode de réalisation particulier de l'invention, ladite phase de 20 mise au point comprend : - une étape de réception, en provenance dudit programme de mise au point dudit langage source, d'une requête d'obtention d'au moins une donnée dépendant de l'exécution de ladite application logicielle, dite donnée dynamique ; 25 - une étape transformation de ladite requête d'obtention d'au moins une donnée dynamique en une requête d'obtention d'au moins une donnée dynamique destinée audit programme de mise au point dudit langage intermédiaire, délivrant une requête de demande d'obtention transformée ; - une étape de transmission de ladite requête d'obtention transformée audit 30 programme de mise au point dudit langage intermédiaire ; - une étape d'exécution de ladite requête d'obtention transformée par ledit programme de mise au point dudit langage intermédiaire délivrant ladite au moins une donnée dynamique ; - une étape de transmission de ladite au moins une donnée dynamique délivrée audit programme de mise au point dudit langage source. Ainsi, le débogueur passerelle qui met en oeuvre le procédé de l'invention peut gérer les requêtes dynamiques qu'il intercepte en provenance du programme de mise au point du langage source et demander au programme de mise au point du langage intermédiaire d'exécuter ces requêtes pour le compte du programme de mise au point du langage source. Selon un mode de réalisation particulier de l'invention, ladite phase de mise au point comprend : - une étape de réception, en provenance dudit programme de mise au point dudit langage source, d'une requête de contrôle d'exécution de ladite 15 application logicielle ; - une étape transformation de ladite requête de contrôle d'exécution reçue en une requête de contrôle d'exécution équivalente destinée audit programme de mise au point dudit langage intermédiaire, délivrant une requête de contrôle d'exécution transformée ; 20 - une étape de transmission de ladite requête de contrôle d'exécution transformée dudit programme de mise au point dudit langage intermédiaire. Ainsi, le débogueur passerelle qui met en oeuvre le procédé de l'invention peut gérer les requêtes de contrôle de flot d'exécution qu'il intercepte en 25 provenance du programme de mise au point du langage source et demander au programme de mise au point du langage intermédiaire d'exécuter ces requêtes pour le compte du programme de mise au point du langage source. Selon une caractéristique particulière de l'invention, ladite phase de mise au point comprend : 30 - une étape de réception, en provenance dudit programme de mise au point dudit langage source, d'une requête de gestion d'événement de ladite application logicielle ; - une étape transformation de ladite requête de gestion d'événement reçue en une requête de contrôle sur l'exécution d'au moins une instruction 5 complémentaire destinée audit programme de mise au point dudit langage intermédiaire, délivrant une requête de gestion transformée ; - une étape de transmission de ladite requête de gestion transformée audit programme de mise au point dudit langage intermédiaire. Ainsi, le débogueur passerelle qui met en oeuvre le procédé de l'invention 10 peut gérer les requêtes de gestion d'événement qu'il intercepte en provenance du programme de mise au point du langage source et demander au programme de mise au point du langage intermédiaire d'exécuter ces requêtes pour le compte du programme de mise au point du langage source. Selon un autre aspect, l'invention concerne également un procédé de 15 compilation d'un programme écrit dans un langage de programmation source vers un programme intermédiaire écrit dans un langage de programmation intermédiaire, ledit programme intermédiaire étant lui-même destiné à être compilé à destination d'une plateforme cible. Selon l'invention, un tel procédé de compilation est caractérisé en ce qu'il 20 comprend une étape d'insertion, au sein dudit programme intermédiaire, d'au moins une instruction complémentaire de contrôle dudit programme intermédiaire par un débogueur passerelle. Ainsi, l'invention rend possible l'utilisation du programme écrit dans le langage intermédiaire, à l'issue de la compilation selon le procédé de compilation 25 de l'invention, par un programme de mise au point dans le langage intermédiaire tout en permettant le contrôle de celui-ci par un programme de mise au point passerelle réalisant une interface entre le programme de mise au point du langage source et le programme de mise au point du langage intermédiaire. Selon un autre aspect, l'invention concerne un système de mise au point d'une application logicielle écrite dans un langage de programmation source et exécutable sur une plateforme cible. Selon l'invention, un tel système comprend : - des moyens de compilation de ladite application logicielle écrite dans ledit langage source délivrant le code d'une application logicielle intermédiaire écrite dans un langage intermédiaire, lesdits moyens de compilation comprenant : - des moyens d'insertion au sein du code de ladite application logicielle intermédiaire d'une construction spécifique d'interception d'évènements intervenant durant l'exécution d'un programme de mise au point dudit langage intermédiaire au moyen d'instructions complémentaires ; - des moyens de formatage du code intermédiaire de ladite application logicielle de sorte que la correspondance entre une ligne du code source et une ligne du code intermédiaire soit la plus fréquente possible ; - des moyens de compilation code de ladite application logicielle intermédiaire en une application logicielle exécutable sur ladite plateforme cible ; - des moyens de mise au point de ladite application logicielle comprenant au moins des moyens de transformation d'au moins une information de mise au point entre un programme de mise au point dudit langage intermédiaire et un programme de mise au point dudit langage source. L'invention concerne également un programme d'ordinateur comportant des instructions pour la mise en oeuvre du procédé de mise au point décrit précédemment lorsque ce programme est exécuté par un processeur, ou un produit programme d'ordinateur téléchargeable depuis un réseau de communication et/ou stocké sur un support lisible par ordinateur et/ou exécutable par un processeur, comprenant des instructions de code de programme pour la mise en oeuvre du procédé de mise au point décrit précédemment, lorsqu'il est exécuté par un processeur. 4 LISTE DES FIGURES D'autres caractéristiques et avantages de l'invention apparaîtront plus clairement à la lecture de la description suivante d'un mode de réalisation préférentiel, donné à titre de simple exemple illustratif et non limitatif, et des dessins annexés, parmi lesquels : - la figure 1, déjà commentée, présente le principe général de la compilation successive d'une application logicielle ; - la figure 2, également déjà commentée, illustre le fonctionnement d'un programme de mise au point (débogueur) d'une application logicielle ; - la figure 3 décrit le principe de l'invention ; 5 DESCRIPTION DETAILLEE DE L'INVENTION 5.1 Rappel du principe de l'invention L'invention permet de réaliser une mise au point de l'application logicielle directement à l'aide du programme de mise au point (débogueur) du langage source. Il n'est donc pas nécessaire lorsque l'invention est mise en oeuvre, de réaliser un débogage de l'application logicielle à l'aide du débogueur du langage intermédiaire. L'invention permet donc de gagner en temps de mise au point et facilite la tâche de mise au point du développeur. En effet, d'une part le développeur n'a pas besoin de connaître le langage de programmation intermédiaire, et d'autre part il n'a pas besoin de reporter, dans le programme écrit dans le langage de programmation source, les modifications réalisées dans le programme intermédiaire écrit dans le langage de programmation intermédiaire. Le procédé de mise au point est mis en oeuvre, dans au moins un mode de réalisation de l'invention, à l'aide d'un débogueur passerelle, servant à faire dialoguer entre eux le débogueur du langage source et le débogueur du langage intermédiaire. L'homme du métier comprendra, à la lecture de la présente demande, que le principe de l'invention peut s'appliquer de manière successive. Ainsi, en mettant en oeuvre l'invention, il est possible de réaliser la mise au point d'une application logicielle écrite dans un langage source quand bien même plusieurs étapes de compilation dans des langages intermédiaires successifs seraient nécessaires avant une compilation finale vers la plateforme cible. Le principe général de l'invention repose notamment, pour une partie, sur l'insertion, lors de la compilation du langage source vers le langage intermédiaire, d'instructions complémentaires destinées à permettre le contrôle du programme de mise au point (débogueur) du langage intermédiaire et à transmettre les informations nécessaire à la mise au point au programme de mise au point du langage source. L'invention propose en quelque sorte une interface entre les différents programmes de mise au point, interface qui est rendue opérante par l'intermédiaire notamment des instructions complémentaires qui sont insérées lors de la compilation du langage source vers le langage intermédiaire. Le principe de l'invention sera mieux compris à l'aide de la figure 3, dans laquelle on présente le principe général de l'invention. Les références numériques communes aux figures 1 et 2 ont été conservées pour plus de clarté. Une application logicielle 101 est rédigée dans un langage de programmation source A. On dispose, pour le langage de programmation A, d'un compilateur 10 et d'un programme de mise au point 11. Cet ensemble est appelé environnement de développement du langage A. On dispose également d'un langage de programmation B, qui peut servir à écrire nativement des applications logicielles. On dispose pour ce langage de programmation B, d'un compilateur 20 et d'un programme de mise au point 21. Lorsque l'on dispose d'un programme écrit à l'aide du langage de programmation B. Cet ensemble est appelé environnement de développement du langage B. Selon l'invention, le langage de programmation B est intitulé langage de programmation intermédiaire, en ce sens qu'il sert d'intermédiaire entre l'application logicielle écrite dans le langage de programmation source A et la version binaire de l'application logicielle pour la plateforme cible. Selon l'invention, on dispose également : - d'un compilateur passerelle 30 du langage source A vers le langage B ; - d'un programme de mise au point passerelle 31 réalisant une interface entre le programme de mise au point 11 du langage A et le programme de mise au point 2l du langage B. Selon l'invention, ce programme de mise au point passerelle 31 permet de contrôler, pour le programme de mise au point 11 du langage A, l'exécution d'un exécutable qui aurait été compilé à l'aide du compilateur 10, alors que cela n'est pas le cas. Selon l'invention, ce programme de mise au point passerelle 31 permet de simuler, pour le programme de mise au point 21 du langage B, la présence d'une interface de réception de données de mise au point (qui pourrait par exemple être utilisée par une interface graphique). Pour réaliser une mise au point selon l'invention, le programme de mise au point passerelle 31 reçoit de la part du compilateur 30 du langage source A vers le langage B, des données de compilation. Ces données de compilation sont issues pour une part d'instructions complémentaires qui sont insérées par le compilateur 30 du langage source A vers le langage B, lors de la compilation de l'application logicielle. Ces données de compilation sont issues pour une autre part des données en mémoire du compilateur ou bien de leur écriture sur fichier dans une structure de données particulière, permettant par exemple de répondre à des requêtes statiques et dynamiques qui peuvent être émises par le programme de mise au point du langage source (langage A). Ainsi, lors de la phase de mise au point proprement dite, le programme de mise au point passerelle 31 utilise ces données de compilation pour intercepter et traduire des requêtes entrantes en provenance du programme de mise au point 11 du langage A (en utilisant un protocole de communication avec ce programme de mise au point 11 du langage A). Les requêtes entrantes sont de type classique et peuvent consister en des requêtes statiques, dynamiques ou de type flot de contrôle (« control flow » en anglais). Le programme de mise au point passerelle 31 transforme ces requêtes 30 entrantes afin qu'elles soient compréhensibles par l'environnement de développement du langage B. Plus particulièrement, selon le type des requêtes entrantes en provenance du programme de mise au point 11 du langage A, le programme de mise au point passerelle 31 peut : - interroger directement, ou indirectement par l'intermédiaire d'un fichier 5 idoine, le compilateur passerelle 30 du langage A vers le langage B afin d'obtenir une réponse ; - interroger le programme de mise au point 21 du langage B afin d'évaluer une expression particulière ; - obtenir des informations de flots de contrôle auprès programme de mise au 10 point 21 du langage B et transformer ces dernières pour qu'elles soient compréhensibles pour le programme de mise au point 11 du langage A. Ainsi, utiliser un programme de mise au point passerelle 31 et un compilateur passerelle 30 pour déboguer l'application logicielle source écrite en langage A fournit plusieurs avantages : 15 - il n'est pas nécessaire de fournir un compilateur du langage A vers le langage B qui doit garder le plus possible les constructions du langage A, ou bien les différents nommages du programme écrit en langage A. En libérant ces contraintes, le compilateur a plus de latitude pour compiler et optimiser le programme ; 20 - il n'est pas nécessaire d'écrire un programme de mise au point pour les langages A et B : il suffit d'utiliser ceux préexistant ; - il n'est pas nécessaire pour le développeur d'apprendre, ou d'entretenir ses compétences en langage B ; - il n'est pas nécessaire pour le développeur d'apprendre un nouveau 25 compilateur, il continue à utiliser celui associé au langage A. Par la suite, on présente notamment le cas d'une utilisation du langage intermédiaire Objective-CTM et du langage source JavaTM. Il est clair cependant que l'invention ne se limite pas à cette application particulière, mais peut également être mise en oeuvre dans de nombreux autres cas de figure, par exemple du langage pascal au langage C et plus généralement dans tous les cas où les objectifs listés par la suite sont intéressants. 5.2 Description d'un mode de réalisation On présente dans ce mode de réalisation, la mise en oeuvre de l'invention à 5 un programme de mise au point passerelle entre un débogueur Eclipse pour JavaTM et un débogueur GDB pour Objective-CTM 5.2.1 Phase de compilation initiale Selon l'invention, préalablement à la mise au point, le compilateur, en mode débogue, réalise une transformation du code source de l'application 10 logicielle écrite dans le langage de programmation source vers le langage de programmation intermédiaire en insérant des instructions complémentaires. Plus particulièrement, le compilateur du langage source vers le langage intermédiaire réalise les modifications suivantes : - Il formate le code pour que chaque ligne en langage source soit le plus 15 possible transformée en une ligne du langage intermédiaire. Ce formatage rend possible l'utilisation de la fonction `step over' du programme de mise au point du langage intermédiaire pour faire un `step over' pour le langage source. - Dans le cas où le compilateur ne peut maintenir cette précédente propriété 20 (une ligne en langage A sur une ligne en langage B), il insère des directives de compilation (c'est à dire « #line » pour les compilateurs de souche C (Objective-C, C++, C, ...». Il indiquera ainsi que ces différentes lignes en langage intermédiaire proviennent de la même ligne en langage source. Par exemple, si le langage A supporte l'initialisation de variable en 25 même temps que sa déclaration, et que le langage B ne supporte pas cette construction, le compilateur devra déplacer l'initialisation de la variable dans une ou plusieurs méthodes d'initialisations. Il insérera, dans ce cas, des directives de compilation pour indiquer que ces différentes initialisations en langage B proviennent de la même ligne en langage A, 30 c'est-à-dire celle où se trouve la déclaration de cette variable. Le nom et le numéro de ligne sont utilisés, dans le procédé de l'invention, non pas comme un pointeur sur une ligne réelle du code source, mais par le programme de mise au point passerelle comme identificateur unique de ligne. Cet identificateur de ligne sera conservé, selon l'invention, dans la représentation intermédiaire du compilateur pour que le programme de mise au point passerelle puisse faire les conversions nécessaires durant la mise au point proprement dite. - Il génère des constructions inutiles pour l'exécution du programme pour que le débogueur passerelle puisse insérer des points d'arrêt (`breakpoint') sur certains événements. Par exemple, pour le Système de Gestion d'Exception (SGE), le débogueur du langage A peut avoir besoin de connaître quand une erreur est signalée au moyen d'une exception (mot-clé «throw» dans certains langages). Dans ce cas, il remplace toutes les occurrences du mot-clé « throw » par un appel d'une méthode particulière avant de les envoyer réellement. Ainsi le débogueur passerelle est informé de tous les envois d'exceptions du programme en insérant un point d'arrêt dans cette méthode. De façon générale, il insère un appel de méthode avant chaque instruction qui génère un événement dont le débogueur du langage A veut avoir connaissance (introduction dans un bloc de traitement d'exception, création/destruction d'un fil d'exécution, introduction dans une méthode particulière, ...). Ainsi, l'application logicielle écrite en langage intermédiaire est spécifiquement construite pour pouvoir générer des données qui seront par la suite utilisées par le débogueur passerelle. Ceci est un point important de l'invention. Les construction dites `inutiles' (inutiles, car elles ne remplissent pas une fonction spécifique dans l'application) sont en fait très utiles pour le constructeur passerelle. 5.2.2 Phase de mise au point Comme cela a déjà été évoqué, la phase de mise au point d'une application 30 logicielle comprend une pluralité d'étape d'émission de requêtes de la part du programme de mise au point du langage concerné. Plus particulièrement, ces étapes d'émissions de requêtes visent à contrôler l'exécution du programme et à obtenir des informations sur l'état de celui-ci (contenu des variables, méthodes exécutées, etc.). Selon l'invention, le débogueur passerelle intercepte toutes les requêtes entrantes en provenance du débogueur du langage source dans le protocole du débogueur du langage source. Pour cela, il connaît, selon l'invention, le protocole utilisé, et se fait passer pour le débogueur final. Il réagit de la même façon, donnant à l'interface graphique ou au développeur les mêmes interactions qu'avec un débogueur classique. 5.2.2.1 Requêtes Statiques Pour les demandes de types statiques, c'est-à-dire ne demandant pas des données dépendant de l'exécution du programme comme le nom des classes, des méthodes, des champs : - Soit le débogueur passerelle trouve l'information dans un fichier d'information écrit par le compilateur (équivalent des informations de débogage en format DWARF par exemple) ; - Soit le débogueur passerelle interroge directement le compilateur qui va chercher en interne les informations nécessaires pour répondre à la requête ; - Soit le débogueur passerelle utilise directement la représentation intermédiaire dans le processus du compilateur pour trouver l'information nécessaire. Dans les trois cas, l'information fournit par le compilateur, à partir d'une structure de données intermédiaires (interne ou externe au compilateur), contient l'ensemble des informations structurelles du programme, il est alors possible de demander de trouver l'ensemble des classes, l'ensemble des méthodes d'instances ou de classes, des champs d'instances ou de classes, l'ensemble des classes contenus, ... d'une certaine classe. 5.2.2.2 Requêtes Dynamiques Pour les demandes de types dynamiques, c'est-à-dire demandant des données dépendant de l'exécution du programme, le débogueur passerelle : - Exprime cette demande en une expression en langage A, par exemple, pour connaître la valeur d'un champ f de classe C du package xxx.yyy.zzz dans un programme Java, il construira une expression telle que xxx.yyy.zzz.C.f et appliquera les mêmes transformations que le compilateur passerelle aurait fait sur une telle expression ; - Demande au débogueur du langage B, dans son protocole, d'évaluer cette expression. Par exemple, avec gdb-mi, il enverra la commande "-dataevaluate-expression xxxyyyzzzCf" ; - Récupère la valeur de l'expression et la traduit en une valeur compréhensible en langage source ; - Répond à la requête. 5.2.2.3 Requêtes de Flot de Contrôle Plusieurs requêtes de contrôle de flot peuvent arriver sur le débogueur passerelle : - La pose d'un `point d'arrêt' (Breakpoint). La requête comporte une localisation du point d'arrêt en tant que nom de fichier et de numéro de ligne dans le fichier. Le débogueur passerelle doit récupérer l'identificateur de ligne unique que le compilateur à insérer durant la phase de compilation sous forme d'un nom de fichier et de numéro de ligne fictif. Il doit demander cette information au compilateur, directement ou indirectement via un fichier, ou va chercher directement cette information dans la représentation intermédiaire du compilateur. Il demandera alors de poser ce point d'arrêt au programme de mise au point du langage intermédiaire. - Le `step-over', le `step-into', .... Grâce au formatage du code source en langage intermédiaire préalablement effectué par le compilateur, le débogueur passerelle n'a qu'à transmettre la requête dans le protocole du débogueur du langage intermédiaire. Si la transformation du code du langage source en langage intermédiaire ne permet pas de faire cette manipulation, ou si le débogueur cible ne supporte pas l'opération, une analyse du flot de contrôle tel que décrit dans l'état de l'art permet de trouver l'ensemble des instructions suivantes possibles. Le procédé comprend alors selon l'invention une étape d'insertion, grâce à la technique précédente, de points d'arrêts (`breakpoint') sur toutes les lignes potentielles suivantes. I1 suffit alors de continuer l'exécution du programme pour assurer que la prochaine instruction exécutée sera bien arrêtée. 5.3 Autres caractéristiques optionnelles et avantages On décrit ci-après un système de mise au point selon l'invention. Un système qui met en oeuvre le procédé de l'invention comprend : - des moyens de compilation de l'application logicielle écrite dans le langage source A délivrant le code d'une application logicielle intermédiaire écrite dans le langage intermédiaire B. Ces moyens de compilation se présentent principalement sous la forme d'un compilateur ad hoc qui peut être exécuté sur un ordinateur. Ce compilateur comporte toutefois, selon l'invention : - des moyens d'insertion au sein du code de l'application logicielle intermédiaire écrite en langage B, d'une construction spécifique d'interception d'événements intervenant durant l'exécution du programme de mise au point dudit langage intermédiaire B au moyen d'instructions complémentaires. Ces instructions complémentaires sont utilisées par le débogueur passerelle pour permettre de renvoyer les informations demandées par le programme de mise au point du langage A. - des moyens de formatage du code intermédiaire de l'application logicielle de sorte que la correspondance entre une ligne du code source et une ligne du code intermédiaire soit la plus fréquente possible. Ces moyens de formatage agissent afin d'assurer une construction du programme intermédiaire écrit dans le langage B qui soit la plus semblable possible à la construction d'origine en langage A. - des moyens de compilation code de l'application logicielle intermédiaire en une application logicielle exécutable sur la plateforme cible. Ces moyens de compilation se présentent principalement sous la forme d'un compilateur ad hoc qui peut être exécuté sur un ordinateur. - des moyens de mise au point de l'application logicielle qui selon l'invention comprennent au moins des moyens de transformation d'au moins une information de mise au point entre un programme de mise au point dudit langage intermédiaire B et le programme de mise au point dudit langage source A.15 REVENDICATIONS1. Procédé de mise au point d'une application logicielle écrite dans un langage de programmation source et exécutable sur une plateforme cible, caractérisé en ce qu'il comprend : une phase de compilation de ladite application logicielle écrite dans ledit langage source délivrant le code d'une application logicielle intermédiaire écrite dans un langage intermédiaire, ladite phase de compilation comprenant en outre : - une étape d'insertion au sein du code de ladite application logicielle intermédiaire, d'une construction spécifique d'interception d'évènements intervenant durant l'exécution d'un programme de mise au point dudit langage intermédiaire, au moyen d'instructions complémentaires ; une étape de formatage du code intermédiaire de ladite application logicielle de sorte que la correspondance entre une ligne du code source et une ligne du code intermédiaire soit la plus fréquente possible , une phase de compilation du code de ladite application logicielle intermédiaire en une application logicielle exécutable sur ladite plateforme cible ; une phase de mise au point de ladite application logicielle comprenant au moins une étape de transformation d'au moins une information de mise au point entre un programme de mise au point dudit langage intermédiaire et un programme de mise au point dudit langage source. 2. Procédé selon la revendication 1 caractérisé en ce que ladite phase de compilation comprend en outre une étape de génération d'au moins une représentation spécifique de ladite application logicielle au sein d'une structure de données intermédiaire et en ce que ladite phase de mise au point met en oeuvre ladite structure de données intermédiaire.. Procédé de mise au point selon la revendication 2, caractérisé en ce que ladite phase de mise au point comprend en outre : - une étape de réception, en provenance dudit programme de mise au point dudit langage source, d'une requête d'obtention d'au moins une donnée ne dépendant pas de l'exécution de ladite application logicielle, dite donnée statique ; - une étape de recherche de ladite au moins une donnée statique dans ladite structure de données intermédiaires ; une étape de transmission de ladite au moins une donnée statique à destination dudit programme de mise au point dudit langage source. 4. Procédé de mise au point selon la revendication 1, caractérisé en ce que ladite phase de mise au point comprend en outre : - une étape de réception, en provenance dudit programme de mise au point dudit langage source, d'une requête d'obtention d'au moins une donnée 15 dépendant de l'exécution de ladite application logicielle, dite donnée dynamique ; - une étape transformation de ladite requête d'obtention d'au moins une donnée dynamique en une requête d'obtention d'au moins une donnée dynamique destinée audit programme de mise au point dudit langage 20 intermédiaire, délivrant une requête de demande d'obtention transformée ; une étape de transmission de ladite requête d'obtention transformée audit programme de mise au point dudit langage intermédiaire ; - une étape d'exécution de ladite requête d'obtention transformée par ledit programme de mise au point dudit langage intermédiaire délivrant ladite 25 au moins une donnée dynamique ; - une étape de transmission de ladite au moins une donnée dynamique délivrée audit programme de mise au point dudit langage source. 5. Procédé de mise au point selon la revendication 1, caractérisé en ce que ladite phase de mise au point comprend en outre : 30 - une étape de réception, en provenance dudit programme de mise au pointdudit langage source, d'une requête de contrôle d'exécution de ladite application logicielle ; - une étape transformation de ladite requête de contrôle d'exécution reçue en une requête de contrôle d'exécution équivalente destinée audit programme de mise au point dudit langage intermédiaire, délivrant une requête de contrôle d'exécution transformée ; une étape de transmission de ladite requête de contrôle d'exécution transformée dudit programme de mise au point dudit langage intermédiaire. 6. Procédé de mise au point selon la revendication 1, caractérisé en ce que ladite phase de mise au point comprend en outre : une étape de réception, en provenance dudit programme de mise au point dudit langage source, d'une requête de gestion d'événement de ladite application logicielle ; - une étape transformation de ladite requête de gestion d'événement reçue en une requête de contrôle sur l'exécution d'au moins une instruction complémentaire destinée audit programme de mise au point dudit langage intermédiaire, délivrant une requête de gestion transformée ; une étape de transmission de ladite requête de gestion transformée audit programme de mise au point dudit langage intermédiaire. 7. Procédé de compilation d'un programme écrit dans un langage de programmation source vers un programme intermédiaire écrit dans un langage de programmation intermédiaire, ledit procédé étant mis en oeuvre lors d'une phase de compilation d'une application logicielle écrite dans ledit langage source délivrant le code d'une application logicielle intermédiaire écrite dans un langage intermédiaire selon le procédé de la revendication 1, ledit programme intermédiaire étant lui-même destiné à être compilé à destination d'une plateforme cible, procédé caractérisé en ce qu'il comprend une étape d'insertion, au sein dudit programme intermédiaire, d'au moins une instruction complémentaire de contrôledudit programme intermédiaire par un débogueur passerelle. 8. Système de mise au point d'une application logicielle écrite dans un langage de programmation source et exécutable sur une plateforme cible, caractérisé en ce qu'il comprend : des moyens de compilation de ladite application logicielle écrite dans ledit langage source délivrant le code d'une application logicielle intermédiaire écrite dans un langage intermédiaire, lesdits moyens de compilation comprenant : des moyens d'insertion au sein du code de ladite application logicielle intermédiaire, d'une construction spécifique d'interception d'évènements intervenant durant l'exécution d'un programme de mise au point dudit langage intermédiaire, au moyen d'instructions complémentaires ; des moyens de formatage du code intermédiaire de ladite application logicielle de sorte que la correspondance entre une ligne du code source et une ligne du code intermédiaire soit la plus fréquente possible ; - des moyens de compilation du code de ladite application logicielle intermédiaire en une application logicielle exécutable sur ladite plateforme cible ; des moyens de mise au point de ladite application logicielle comprenant au moins des moyens de transformation d'au moins une information de mise au point entre un programme de mise au point dudit langage intermédiaire et un programme de mise au point dudit langage source. 9. Produit programme d'ordinateur téléchargeable depuis un réseau de communication et/ou stocké sur un support lisible par ordinateur et/ou exécutable par un microprocesseur, caractérisé en ce qu'il comprend des instructions de code de programme pour l'exécution du procédé de mise au point selon l'une au moins des revendications 1 à 6, lorsqu'il est exécuté sur un ordinateur.