[go: up one dir, main page]

EP2507702A1 - Software application fine-tuning method, system, and corresponding computer program product - Google Patents

Software application fine-tuning method, system, and corresponding computer program product

Info

Publication number
EP2507702A1
EP2507702A1 EP10785435A EP10785435A EP2507702A1 EP 2507702 A1 EP2507702 A1 EP 2507702A1 EP 10785435 A EP10785435 A EP 10785435A EP 10785435 A EP10785435 A EP 10785435A EP 2507702 A1 EP2507702 A1 EP 2507702A1
Authority
EP
European Patent Office
Prior art keywords
language
program
software application
debugging
source
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
EP10785435A
Other languages
German (de)
French (fr)
Inventor
Gilbert Cabillic
Jean-Philippe Lesot
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Flexycore SAS
Original Assignee
Flexycore SAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Flexycore SAS filed Critical Flexycore SAS
Publication of EP2507702A1 publication Critical patent/EP2507702A1/en
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/3624Debugging of software by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/3636Debugging of software by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design

Definitions

  • a software application debugging method, system and corresponding computer program product A software application debugging method, system and corresponding computer program product.
  • the present invention relates to the field of development of programs or software applications.
  • the present invention relates more particularly to the development of programs or software applications in heterogeneous environments.
  • a computer program, or a software application is generally composed of a set of binary or intermediate instructions said executable.
  • These executable instructions are usually derived from a compilation of a program written in a source language.
  • a developer writes a source program written in a specific programming language.
  • This source program is then compiled to form an executable program.
  • the instructions written in source language are transformed into a binary program which is itself executed on a hardware platform such as a computer, a communication terminal.
  • the source program undergoes a succession of compilations: the source program is for example compiled a first time in an intermediate language in order to provide an intermediate program then the intermediate program is compiled into a binary format to deliver the final binary application.
  • the developer who writes the source program wants the final software application to run on a particular hardware platform or the final software application has a higher performance than the one that would be delivered.
  • compiling the source program with a traditional compiler.
  • Successive compilations are also used when the developer does not wish to change the programming platform despite the fact that the platform on which the final software application is to run does not have a compiler to compile a program written in a given source language.
  • a source software application (101) is written by an application developer.
  • This source program includes computer program instructions written in a source programming language.
  • the source program (101) undergoes a first compilation phase by a compiler (10) which results in its transformation into an intermediate program (102).
  • This intermediate program (102) is written in an intermediate programming language.
  • the program source can be written in Java TM language while the intermediate program resulting from the first compilation phase can be written in C ++ or C language.
  • the intermediate program (102) also undergoes a compilation phase, using a compiler (20) during which it is transformed into an executable program (103).
  • a compiler (20) during which it is transformed into an executable program (103).
  • several phases of successive compilations can be performed in different intermediate programming languages to provide an executable program that meets the requirements of the target platform on which it must be executed.
  • a software application contains multiple anomalies (also called "bug"). These anomalies are usually identified and corrected during a unit testing phase and then during a so-called recipe phase.
  • a debugger is a program that, in connection with the compiler, allows to control the execution of the software application written in the source language.
  • the source software application to be debugged is run through the debugger and runs normally.
  • the debugger offers the developer the ability to control the execution of the software application, allowing it by various means to stop, pause the execution of the software application or to observe for example the content of the software application. different variables in memory. The execution state can then be observed to, for example, determine a cause of a failure.
  • Debuggers work properly when a single compile step is required to transform a software application written in a source language into an executable software application.
  • the general principle of implementation of a debugger (11) is presented.
  • the source program (101) is compiled, according to a specific method (DB), by the compiler (10).
  • This specific method is usually called "Debug Mode".
  • the developer can then control the execution of the program compiled by the debugger (1 1) by viewing, through a debugger debug interface, the various aspects of the program.
  • the debugger uses the relationships between the instructions of the source program and the instructions of the compiled program that the compiler (10) generated according to the specific method (DB).
  • a problem is posed when debugging applications that undergo several (at least two) successive compilations in at least one intermediate language.
  • a program written in an A language is compiled into a program written in a B language
  • a program written in the B language compiled in turn into a binary form
  • the debugging is done using a debugger dedicated to language B, and using the intermediate program written in language B.
  • the intermediate code must be humanly readable to facilitate this task, which is far from the case.
  • compilers do not provide compiled programs intended to be read and understood by humans. Compiled programs include many optimizations that make them unreadable for most developers.
  • the program developer in the source language must also know the intermediate language to debug the binary code with the intermediate language debugger. It must then report all the corrections made to the intermediate program in the program written in source language, and for that purpose understand how the compiler from the source language to the intermediate language works. This greatly reduces the appeal of such a solution.
  • the compiler of the source language to the intermediate language must as much as possible make the generation of its code in intermediate language (same name, same construction, ...) as humanly readable. This is not always possible because the source language and the intermediate language can be too semantically distant from each other to ensure this property. In any case, these constraints influence too much the design of the compiler, and the optimizations it can do.
  • the invention provides a novel and inventive solution to these problems of the prior art.
  • the invention proposes a method for developing a software application written in a source and executable programming language on a target platform
  • such a method comprises:
  • a compilation phase of said software application written in said source language delivering the code of an intermediate software application written in an intermediate language, said compilation phase furthermore comprising:
  • a development phase of said software application comprising at least one step of transforming at least one debug information between a debugging program of said intermediate language and a debugging program of said source language.
  • the invention makes it possible to control a future process for debugging the intermediate program by means of instructions which are intended for the debugger of the intermediate program.
  • additional instructions which are not necessary, as such, in the process of compiling the program written in the intermediate programming language towards the target platform, make it possible to check the execution of the intermediate program when it is itself being debugged.
  • additional instructions also make it possible to transmit to a debugger of the source program the information necessary for debugging the source program.
  • the invention is based on a completely new and inventive approach to the debugging of software applications whose source language undergoes successive compilations.
  • the invention makes it possible on the one hand not to have to learn the intermediate language or languages in which the source program is successively compiled.
  • the invention makes it possible not to debug the application in an intermediate language to reintegrate subsequently the corrections made in the program written in source language.
  • said compilation phase further comprises a step of generating at least one specific representation of said software application within an intermediate data structure and said debugging phase sets implement said intermediate data structure.
  • the invention makes it possible to construct a data structure that can be used for debugging by indicating, in this intermediate data structure, the information that could be useful to the gateway debugger to improve or facilitate the tuning from the source language debugger.
  • said development phase comprises:
  • the gateway debugger that implements the method of the invention can manage the static requests that it intercepts from the debugging program of the source language.
  • said development phase comprises:
  • the gateway debugger that implements the method of the invention can manage the dynamic requests that it intercepts from the debugging program of the source language and ask the debugging program of the intermediate language to execute these queries on behalf of the source language debugger program.
  • said development phase comprises:
  • the gateway debugger that implements the method of the invention can manage the execution flow control requests that it intercepts from the source language debugging program and request the debugger program to intermediate language to execute these queries on behalf of the source language debugger.
  • said development phase comprises:
  • the gateway debugger that implements the method of the invention can handle the event management requests it intercepts from the source language debugger and request the intermediate language debugger program. execute these queries on behalf of the source language debugger.
  • the invention also relates to a method of compiling a program written in a source programming language to an intermediate program written in an intermediate programming language, said intermediate program being itself intended to be compiled at its destination. a target platform.
  • such a compilation method is characterized in that it comprises a step of insertion, within said intermediate program, of at least one complementary control instruction of said intermediate program by a gateway debugger.
  • the invention makes it possible to use the program written in the intermediate language, at the end of the compilation according to the compilation method of the invention, by a program of debugging in the intermediate language while allowing the controlling it by a gateway debugging program providing an interface between the source language debugger and the intermediate language debugger.
  • the invention relates to a system for debugging a software application written in a source programming language and executable on a target platform.
  • such a system comprises: means for compiling said software application written in said source language delivering the code of an intermediate software application written in an intermediate language, said compilation means comprising:
  • means for debugging said software application comprising at least means for transforming at least one debug information between a debugging program of said intermediate language and a program for debugging said source language.
  • the invention also relates to a computer program comprising instructions for implementing the debugging method previously described when this program is executed by a processor, or a computer program product downloadable from a communication network and / or stored on a computer-readable and / or executable medium by a processor, including program code instructions for carrying out the debugging method described above, when executed by a processor.
  • Figure 2 also already commented, illustrates the operation of a debugger program of a software application
  • Figure 3 describes the principle of the invention
  • the invention makes it possible to debug the software application directly using the debugger program of the source language. It is therefore not necessary when the invention is implemented to debug the software application using the debugger of the intermediate language.
  • the invention thus makes it possible to save in time of development and facilitates the task of development of the developer. Indeed, on the one hand the developer does not need to know the intermediate programming language, and on the other hand he does not need to report, in the program written in the source programming language, the modifications made in the intermediate program written in the intermediate programming language.
  • the debugging method is implemented, in at least one embodiment of the invention, using a gateway debugger, used to dialogue between the source language debugger and the intermediate language debugger.
  • the gateway debugger is a program or software that defines an interface between the source language debugger and the destination language debugger.
  • the gateway debugger can also interact directly with the destination language compiler to evaluate, on behalf of the debugger of the source language or other component, an expression, for example a dynamic expression, which is transmitted to it and when this expression has been evaluated by the compiler of the destination language, retransform the result of this expression into an understandable result for the debugger of the source language or other component.
  • the general principle of the invention rests, in part, on the insertion, during the compilation of the source language into the intermediate language, of additional instructions intended to allow the control of the debugging program of the intermediate language and to transmit the information needed for debugging to the source language debugger.
  • the invention proposes, as it were, an interface between the various debugging programs, which interface is made operational by means of, in particular, complementary instructions which are inserted during the compilation of the source language into the intermediate language.
  • a software application 1 0 1 is written in a source programming language A. It has, for the programming language A, a compiler 10 and a debugging program 11. This set is called the development environment of the program. language A.
  • the programming language B is called the intermediate programming language, in the sense that it serves as an intermediary between the software application written in the source programming language A and the binary version of the software application for the target platform.
  • a gateway compiler 30 of the source language A to the language B a gateway debugging program 31 providing an interface between the debugging program 11 of the language A and the tuning program 21 of the language B.
  • this gateway debugging program 31 makes it possible to control, for the debugging program 11 of the language A, the execution of an executable which would have been compiled using the compiler 10, whereas this is not the case. According to the invention, this gateway debugging program 31 makes it possible to simulate, for the debugging program 21 of the B language, the presence of a debugging data reception interface (which could for example be used through a graphical interface).
  • the gateway debugging program 31 receives from the compiler 30 of the source language A to the language B, compilation data.
  • This compilation data are derived for a part from additional instructions which are inserted by the compiler 30 of the source language A to the language B, during the compilation of the software application.
  • This compilation data is derived for another part from data in the compiler's memory or from their file writing in a particular data structure, allowing for example to respond to static and dynamic queries that can be issued by the scheduling program. at the point of the source language (language A).
  • the gateway debugging program 31 uses this compilation data to intercept and translate incoming requests from the debugger program 11 of the A language (using a protocol of communication with this debugging program 11 of the language A).
  • Incoming queries are of the conventional type and may consist of static, dynamic or control flow type queries ("control flow").
  • the gateway debugging program 31 transforms these incoming requests so that they are understandable by the B-language development environment. More particularly, depending on the type of the incoming requests coming from the debugger program 1 1 of the language A , the gateway debugging program 31 can:
  • the gateway compiler 30 query directly, or indirectly via a suitable file, the gateway compiler 30 from the language A to the language B to obtain a response;
  • gateway debugging program 31 and a gateway compiler 30 to debug the source software application written in A language provides several advantages:
  • the implementation of the invention is presented to a gateway debugging program between an Eclipse debugger for Java TM and a GDB debugger for Objective-C TM.
  • the compiler prior to debugging, performs a transformation of the source code of the software application written in the source programming language into the intermediate programming language by inserting additional instructions. More particularly, the compiler of the source language to the intermediate language makes the following modifications:
  • the compiler In the case where the compiler can not maintain this previous property (a line in language A on a line in language B), it inserts compilation directives (ie "#line” for compilers of strain C (Objective -C, C ++, C, ...)). It will indicate that these different Lines in intermediate language come from the same line in source language. For example, if the language A supports the initialization of variable at the same time as its declaration, and the language B does not support this construction, the compiler will have to move the initialization of the variable in one or more methods of initializations. It will insert, in this case, compilation directives to indicate that these different initializations in language B come from the same line in language A, that is to say the one where the declaration of this variable is.
  • the name and line number are used, in the method of the invention, not as a pointer to an actual line of the source code, but by the gateway debugger as the unique line identifier.
  • This line identifier will be retained, according to the invention, in the intermediate representation of the compiler so that the gateway debugging program can make the necessary conversions during the actual tuning.
  • the gateway debugger can insert breakpoints on certain events.
  • the A language debugger may need to know when an error is reported with an exception ("throw" keyword in some languages). In this case, it replaces all occurrences of the keyword "throw” with a call to a particular method before actually sending them.
  • the gateway debugger is informed of all program exception shipments by inserting a breakpoint in this method. In general, it inserts a method call before each statement that generates an event whose debugger of the language A wants to know (introduction into an exception processing block, creation / destruction of a thread, introduction into a particular method, ).
  • the software application written in intermediate language is specifically constructed to be able to generate data that will subsequently be used by the gateway debugger. This is an important point of the invention. Buildings called 'useless' (useless because they do not fulfill a specific function in the application) are actually very useful for the gateway constructor.
  • the development phase of a software application comprises a plurality of requests transmission step of the program of development of the language concerned. More particularly, these request transmission steps are intended to control the execution of the program and to obtain information on the state of the program (content of the variables, methods executed, etc.).
  • the gateway debugger intercepts all incoming requests from the source language debugger in the debugger protocol of the source language. For this, he knows, according to the invention, the protocol used, and masquerading as the final debugger. It reacts in the same way, giving the GUI or the developer the same interactions as with a classic debugger.
  • Either the gateway debugger finds the information in an information file written by the compiler (equivalent to the debug information in DWARF format for example);
  • Either the gateway debugger directly queries the compiler, which will internally search for the information needed to respond to the request; Either the gateway debugger directly uses the intermediate representation in the compiler process to find the necessary information.
  • the information provided by the compiler contains all the structural information of the program, it is then possible to ask to find the set of classes, the set of methods of instances or classes, fields of instances or classes, the set of classes contained, ... of a certain class.
  • the gateway debugger For dynamic type requests, that is, requesting data depending on the execution of the program, the gateway debugger:
  • This solution also has the advantage of making the compiler of the gateway debugger independent. Indeed, the gateway debugger does not have the knowledge of the correspondence between the expression in the source language and the expression in the target language, it queries the compiler for that.
  • the installation of a 'Breakpoint' includes a location of the breakpoint as the file name and line number in the file.
  • the gateway debugger must retrieve the unique line identifier that the compiler to be inserted during the compilation phase as a file name and fictitious line number II must request this information from the compiler, directly or indirectly via a file , or will look for this information directly in the intermediate representation of the compiler. It will then ask to set this breakpoint to the program of debugging the intermediate language.
  • the gateway debugger has only to transmit the request in the protocol of the debugger of the intermediate language. If the transformation of the code of the source language into intermediate language does not make it possible to do this manipulation, or if the target debugger does not support the operation, an analysis of the control flow as described in the state of the art makes it possible to find all of the following possible instructions.
  • the method then comprises according to the invention a step of insertion, thanks to the previous technique, breakpoints ('breakpoint') on all the following potential lines. It is then sufficient to continue the execution of the program to ensure that the next instruction executed will be stopped.
  • a system that implements the method of the invention comprises:
  • code compilation means of the intermediate software application into a software application executable on the target platform are mainly in the form of an ad hoc compiler that can be run on a computer.
  • means for debugging the software application which according to the invention comprise at least means for transforming at least one debugging information between a debugging program of said intermediate language B and the program for setting the point of said source language A.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

The invention relates to a method for fine-tuning a software application that is written in a source programming language and is executable on a target platform. According to the invention, such a method includes: a stage of compiling said software application that is written in said source language and supplies the code of an intermediate software application that is written in an intermediate language, said stage comprising a step of inserting, into the code of said intermediate software application, a specific construction for intercepting events by means of complementary instructions, and a step of formatting the intermediate code of said software application such that the matching of a line of source code with a line of intermediate code is the most frequent possible matching; a stage of compiling the code from said intermediate software application into an executable software application; and a stage for fine-tuning said software application, said stage including at least one step of converting at least one piece of fine-tuning information between a program for fine-tuning said intermediate language and a program for fine-tuning said source language.

Description

Procédé de mise au point d'application logicielle, système et produit programme d'ordinateur correspondant.  A software application debugging method, system and corresponding computer program product.
1 DOMAINE DE L'INVENTION 1 FIELD OF THE INVENTION
La présente invention se rapporte au domaine de la mise au point de programmes ou d'applications logicielles.  The present invention relates to the field of development of programs or software applications.
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.  The present invention relates more particularly to the development of programs or software applications in heterogeneous environments.
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.  A computer program, or a software application is generally composed of a set of binary or intermediate instructions said executable. These executable instructions are usually derived from a compilation of a program written in a source language. Thus, to be able to create a software application, a developer writes a source program written in a specific programming language. This source program is then compiled to form an executable program. During this compilation, the instructions written in source language are transformed into a binary program which is itself executed on a hardware platform such as a computer, a communication terminal.
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. To compile a program written in a source language for a certain target (processor, platform, ...), there are four general methods: to have a complete compiler, that is to say including a part that takes care of to recognize the source language, and another which is responsible for creating the executable program for the chosen target. This is the general case; have a compiler from the source language to an intermediate code, and provide a virtual machine of this intermediate code on the chosen target.
C'est le cas général pour le langage Java™ par exemple ; This is the general case for the Java ™ language for example;
fournir, à un compilateur qui existe déjà pour la cible choisie, un module complémentaire pour reconnaître le langage source ;  provide, to a compiler that already exists for the chosen target, an add-on to recognize the source language;
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 œuvre un compilateur existant du langage intermédiaire pour la cible choisie. have a compiler that transforms a program written in a source language into a program written in an intermediate language, and implement an existing intermediate language compiler for the chosen target.
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é.  Thus, apart from the general case above, there are more complex procedures in which the source program undergoes a succession of compilations: the source program is for example compiled a first time in an intermediate language in order to provide an intermediate program then the intermediate program is compiled into a binary format to deliver the final binary application. Such a situation arises when the developer who writes the source program wants the final software application to run on a particular hardware platform or the final software application has a higher performance than the one that would be delivered. compiling the source program with a traditional compiler. Successive compilations are also used when the developer does not wish to change the programming platform despite the fact that the platform on which the final software application is to run does not have a compiler to compile a program written in a given source language.
2 SOLUTIONS DE L'ART ANTERIEUR  2 SOLUTIONS OF THE PRIOR ART
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.  Thus, when a developer wishes to create a software application that will undergo a succession of compilation (that is to say at least two) prior to the completion of a binary computer program, there is the problem of setting or point (also called "debugging") of the 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 Java™ tandis que le programme intermédiaire résultant de la première phase de compilation peut être écrit dans le langage C++ ou C. In relation to FIG. 1, the general principle of the successive compilation of an application is presented. A source software application (101) is written by an application developer. This source program includes computer program instructions written in a source programming language. The source program (101) undergoes a first compilation phase by a compiler (10) which results in its transformation into an intermediate program (102). This intermediate program (102) is written in an intermediate programming language. For example, the program source can be written in Java ™ language while the intermediate program resulting from the first compilation phase can be written in C ++ or C language.
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é.  In the case where a suitable compiler exists, the intermediate program (102) also undergoes a compilation phase, using a compiler (20) during which it is transformed into an executable program (103). In other cases, several phases of successive compilations can be performed in different intermediate programming languages to provide an executable program that meets the requirements of the target platform on which it must be executed.
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.  During such successive compilation operations, the inventors have found that it is extremely complicated to perform a development of the software application. Indeed, conventionally, a software application contains multiple anomalies (also called "bug"). These anomalies are usually identified and corrected during a unit testing phase and then during a so-called recipe phase.
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.  To make these corrections, the developers are helped by a debugging program, also called "debugger". A debugger is a program that, in connection with the compiler, allows to control the execution of the software application written in the source language. The source software application to be debugged is run through the debugger and runs normally. The debugger then offers the developer the ability to control the execution of the software application, allowing it by various means to stop, pause the execution of the software application or to observe for example the content of the software application. different variables in memory. The execution state can then be observed to, for example, determine a cause of a failure.
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 œuvre 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 (1 1) 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). Debuggers work properly when a single compile step is required to transform a software application written in a source language into an executable software application. In relation to FIG. 2, the general principle of implementation of a debugger (11) is presented. The source program (101) is compiled, according to a specific method (DB), by the compiler (10). This specific method is usually called "Debug Mode". The developer can then control the execution of the program compiled by the debugger (1 1) by viewing, through a debugger debug interface, the various aspects of the program. To do this, the debugger uses the relationships between the instructions of the source program and the instructions of the compiled program that the compiler (10) generated according to the specific method (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.  A problem is posed when debugging applications that undergo several (at least two) successive compilations in at least one intermediate language. Currently, when a program written in an A language is compiled into a program written in a B language, then a program written in the B language compiled in turn into a binary form, the debugging is done using a debugger dedicated to language B, and using the intermediate program written in language B. For this the intermediate code must be humanly readable to facilitate this task, which is far from the case. As a general rule, compilers do not provide compiled programs intended to be read and understood by humans. Compiled programs include many optimizations that make them unreadable for most developers.
De plus, le fait de devoir utiliser un débogueur du langage intermédiaire présente au moins les deux problèmes suivants :  In addition, having to use an intermediate language debugger has at least the following two problems:
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. Il 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. The program developer in the source language must also know the intermediate language to debug the binary code with the intermediate language debugger. It must then report all the corrections made to the intermediate program in the program written in source language, and for that purpose understand how the compiler from the source language to the intermediate language works. This greatly reduces the appeal of such a solution. The compiler of the source language to the intermediate language must as much as possible make the generation of its code in intermediate language (same name, same construction, ...) as humanly readable. This is not always possible because the source language and the intermediate language can be too semantically distant from each other to ensure this property. In any case, these constraints influence too much the design of the compiler, and the optimizations it can do.
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.  Thus, the problems generated by multiple compilations make it very difficult to use debuggers when developing software applications requiring multiple intermediate compilations.
3 RESUME DE L'INVENTION  3 SUMMARY OF THE INVENTION
L'invention apporte notamment une solution nouvelle et inventive à ces problèmes de l'art antérieur.  The invention provides a novel and inventive solution to these problems of the prior art.
En effet l'invention propose un procédé de mise au point d'une application logicielle écrite dans un langage de programmation source et exécutable sur une plateforme cible,  Indeed the invention proposes a method for developing a software application written in a source and executable programming language on a target platform,
Selon l'invention, un tel procédé comprend :  According to the invention, such a method comprises:
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 :  a compilation phase of said software application written in said source language delivering the code of an intermediate software application written in an intermediate language, said compilation phase furthermore comprising:
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 ;  a step of insertion within the code of said intermediate software application, of a specific construction of interception of events occurring during the execution of a debugging program of said intermediate language, by means of complementary instructions;
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 ; a step of formatting the intermediate code of said software application so that the correspondence between a line of the source code and a line of the intermediate code is as frequent as possible; a phase of compiling the code of said intermediate software application into a software application executable on said target platform;
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.  a development phase of said software application comprising at least one step of transforming at least one debug information between a debugging program of said intermediate language and a debugging program of said source language.
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.  Thus, according to this aspect, the invention makes it possible to control a future process for debugging the intermediate program by means of instructions which are intended for the debugger of the intermediate program. These additional instructions, which are not necessary, as such, in the process of compiling the program written in the intermediate programming language towards the target platform, make it possible to check the execution of the intermediate program when it is itself being debugged. These additional instructions also make it possible to transmit to a debugger of the source program the information necessary for debugging the source program.
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.  Thus, the invention is based on a completely new and inventive approach to the debugging of software applications whose source language undergoes successive compilations. The invention makes it possible on the one hand not to have to learn the intermediate language or languages in which the source program is successively compiled. On the other hand, the invention makes it possible not to debug the application in an intermediate language to reintegrate subsequently the corrections made in the program written in source language.
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 œuvre 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. According to a particular embodiment of the invention, said compilation phase further comprises a step of generating at least one specific representation of said software application within an intermediate data structure and said debugging phase sets implement said intermediate data structure. Thus, the invention makes it possible to construct a data structure that can be used for debugging by indicating, in this intermediate data structure, the information that could be useful to the gateway debugger to improve or facilitate the tuning from the source language debugger.
Selon une caractéristique particulière de l'invention ladite phase de mise au point comprend :  According to a particular characteristic of the invention, said development phase comprises:
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 ;  a step of receiving, from said debugging program of said source language, a request to obtain at least one piece of data that does not depend on the execution of said software application, called static data;
une étape de recherche de ladite au moins une donnée statique dans ladite structure de données intermédiaires ;  a step of searching for said at least one static data in said intermediate data structure;
une étape de transmission de ladite au moins une donnée statique à destination dudit programme de mise au point dudit langage source.  a step of transmitting said at least one static data to said debugging program of said source language.
Ainsi, le débogueur passerelle qui met en œuvre 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.  Thus, the gateway debugger that implements the method of the invention can manage the static requests that it intercepts from the debugging program of the source language.
Selon un mode de réalisation particulier de l'invention, ladite phase de mise au point comprend :  According to a particular embodiment of the invention, said development phase comprises:
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 ;  a step of receiving, from said debugging program of said source language, a request for obtaining at least one data item dependent on the execution of said software application, called dynamic data;
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 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 ; a step of transforming said request for obtaining at least one dynamic data item into a request for obtaining at least one dynamic data item for said debugging program of said intermediate language, delivering a transformed obtaining request request; a step of transmitting said transformed obtaining request to said debugging program of said intermediate language; a step of executing said obtaining request transformed by said debugging program of said intermediate language delivering said at least one dynamic datum;
une étape de transmission de ladite au moins une donnée dynamique délivrée audit programme de mise au point dudit langage source.  a step of transmitting said at least one dynamic data item delivered to said debugging program of said source language.
Ainsi, le débogueur passerelle qui met en œuvre 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.  Thus, the gateway debugger that implements the method of the invention can manage the dynamic requests that it intercepts from the debugging program of the source language and ask the debugging program of the intermediate language to execute these queries on behalf of the source language debugger program.
Selon un mode de réalisation particulier de l'invention, ladite phase de mise au point comprend :  According to a particular embodiment of the invention, said development phase comprises:
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 application logicielle ;  a step of receiving, from said debugging program of said source language, an execution control request of said software application;
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 ;  a step of transforming said received execution control request into an equivalent execution control request for said debugging program of said intermediate language, delivering a transformed execution control request;
- 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. a step of transmitting said transformed execution control request of said debugging program of said intermediate language.
Ainsi, le débogueur passerelle qui met en œuvre le procédé de l'invention peut gérer les requêtes de contrôle de flot d' exécution 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.  Thus, the gateway debugger that implements the method of the invention can manage the execution flow control requests that it intercepts from the source language debugging program and request the debugger program to intermediate language to execute these queries on behalf of the source language debugger.
Selon une caractéristique particulière de l'invention, ladite phase de mise au point comprend :  According to a particular characteristic of the invention, said development phase comprises:
- 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 ; a reception step, from said debugging program said source language, an event management request of said software application;
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 ;  a step of transforming said received event management request into a control request on the execution of at least one complementary instruction for said debugging program of said intermediate language, delivering a transformed management request;
une étape de transmission de ladite requête de gestion transformée audit programme de mise au point dudit langage intermédiaire.  a step of transmitting said transformed management request to said debugging program of said intermediate language.
Ainsi, le débogueur passerelle qui met en œuvre le procédé de l'invention 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.  Thus, the gateway debugger that implements the method of the invention can handle the event management requests it intercepts from the source language debugger and request the intermediate language debugger program. execute these queries on behalf of the source language debugger.
Selon un autre aspect, l'invention concerne également un 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 programme intermédiaire étant lui-même destiné à être compilé à destination d'une plateforme cible.  According to another aspect, the invention also relates to a method of compiling a program written in a source programming language to an intermediate program written in an intermediate programming language, said intermediate program being itself intended to be compiled at its destination. a target platform.
Selon l'invention, un tel procédé de compilation est 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ôle dudit programme intermédiaire par un débogueur passerelle.  According to the invention, such a compilation method is characterized in that it comprises a step of insertion, within said intermediate program, of at least one complementary control instruction of said intermediate program by a gateway debugger.
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 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 : Thus, the invention makes it possible to use the program written in the intermediate language, at the end of the compilation according to the compilation method of the invention, by a program of debugging in the intermediate language while allowing the controlling it by a gateway debugging program providing an interface between the source language debugger and the intermediate language debugger. In another aspect, the invention relates to a system for debugging a software application written in a source programming language and executable on a target platform. According to the invention, such a system comprises: means for compiling said software application written in said source language delivering the code of an intermediate software application written in an intermediate language, said compilation means comprising:
des moyens d'insertion au sein du code de ladite application lo gicielle 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 ;  means for inserting into the code of said intermediate software application a specific event interception construct occurring during the execution of a debugging program of said intermediate language by means of complementary instructions;
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 ;  means for formatting the intermediate code of said software application so that the correspondence between a line of the source code and a line of the intermediate code is as frequent as possible;
des moyens de compilation code de ladite application logicielle intermédiaire en une application logicielle exécutable sur ladite plateforme cible ;  code compilation means of said intermediate software application into a software application executable on said target platform;
- 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. means for debugging said software application comprising at least means for transforming at least one debug information between a debugging program of said intermediate language and a program for debugging said source language.
L'invention concerne également un programme d'ordinateur comportant des instructions pour la mise en œuvre 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 œuvre du procédé de mise au point décrit précédemment, lorsqu'il est exécuté par un processeur. The invention also relates to a computer program comprising instructions for implementing the debugging method previously described when this program is executed by a processor, or a computer program product downloadable from a communication network and / or stored on a computer-readable and / or executable medium by a processor, including program code instructions for carrying out the debugging method described above, when executed by a processor.
4 LISTE DES FIGURES  4 LIST OF 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 :  Other characteristics and advantages of the invention will appear more clearly on reading the following description of a preferred embodiment, given as a simple illustrative and nonlimiting example, and the appended drawings, among which:
la figure 1, déjà commentée, présente le principe général de la compilation successive d'une application logicielle ;  Figure 1, already commented, presents the general principle of the successive compilation of a software application;
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 ;  Figure 2, also already commented, illustrates the operation of a debugger program of a software application; Figure 3 describes the principle of the invention;
5 DESCRIPTION DETAILLEE DE L'INVENTION  DETAILED DESCRIPTION OF THE INVENTION
5.1 Rappel du principe de l'invention  5.1 Recall of the principle of 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 œuvre, 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.  The invention makes it possible to debug the software application directly using the debugger program of the source language. It is therefore not necessary when the invention is implemented to debug the software application using the debugger of the intermediate language. The invention thus makes it possible to save in time of development and facilitates the task of development of the developer. Indeed, on the one hand the developer does not need to know the intermediate programming language, and on the other hand he does not need to report, in the program written in the source programming language, the modifications made in the intermediate program written in the intermediate programming language.
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. Plus particulièrement, le débogueur passerelle est un programme ou un logiciel qui définit une interface entre le débogueur du langage source et le débogueur du langage de destination. Le débogueur passerelle peut également interagir directement avec le compilateur du langage de destination afin de faire évaluer, pour le compte du débogueur du langage source ou d'un autre composant, une expression, par exemple une expression dynamique, qui lui est transmise et lorsque cette expression a été évaluée par le compilateur du langage de destination, retransformer le résultat de cette expression en un résultat compréhensible pour le débogueur du langage source ou de l'autre composant. The debugging method is implemented, in at least one embodiment of the invention, using a gateway debugger, used to dialogue between the source language debugger and the intermediate language debugger. . More specifically, the gateway debugger is a program or software that defines an interface between the source language debugger and the destination language debugger. The gateway debugger can also interact directly with the destination language compiler to evaluate, on behalf of the debugger of the source language or other component, an expression, for example a dynamic expression, which is transmitted to it and when this expression has been evaluated by the compiler of the destination language, retransform the result of this expression into an understandable result for the debugger of the source language or other component.
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 œuvre 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.  Those skilled in the art will understand, on reading the present application, that the principle of the invention can be applied successively. Thus, by implementing the invention, it is possible to develop a software application written in a source language even if several stages of compilation in successive intermediate languages would be necessary before a final compilation to the platform target.
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.  The general principle of the invention rests, in part, on the insertion, during the compilation of the source language into the intermediate language, of additional instructions intended to allow the control of the debugging program of the intermediate language and to transmit the information needed for debugging to the source language debugger.
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.  The invention proposes, as it were, an interface between the various debugging programs, which interface is made operational by means of, in particular, complementary instructions which are inserted during the compilation of the source language into the intermediate language.
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é.  The principle of the invention will be better understood with reference to FIG. 3, in which the general principle of the invention is presented. The numerical references common to Figures 1 and 2 have been retained for clarity.
Une application logicielle 1 0 1 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.  A software application 1 0 1 is written in a source programming language A. It has, for the programming language A, a compiler 10 and a debugging program 11. This set is called the development environment of the program. language 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. There is also a programming language B, which can be used to write software applications natively. We have for this language of programming B, a compiler 20 and a debugging program 21. When one has a program written using the programming language B. This set is called the B language development environment. According to the invention, the programming language B is called the intermediate programming language, in the sense that it serves as an intermediary between the software application written in the source programming language A and the binary version of the software application for the target platform.
Selon l'invention, on dispose également :  According to the invention, there is also:
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 21 du langage B.  a gateway compiler 30 of the source language A to the language B; a gateway debugging program 31 providing an interface between the debugging program 11 of the language A and the tuning program 21 of the language 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).  According to the invention, this gateway debugging program 31 makes it possible to control, for the debugging program 11 of the language A, the execution of an executable which would have been compiled using the compiler 10, whereas this is not the case. According to the invention, this gateway debugging program 31 makes it possible to simulate, for the debugging program 21 of the B language, the presence of a debugging data reception interface (which could for example be used through a graphical interface).
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). To achieve tuning according to the invention, the gateway debugging program 31 receives from the compiler 30 of the source language A to the language B, compilation data. This compilation data are derived for a part from additional instructions which are inserted by the compiler 30 of the source language A to the language B, during the compilation of the software application. This compilation data is derived for another part from data in the compiler's memory or from their file writing in a particular data structure, allowing for example to respond to static and dynamic queries that can be issued by the scheduling program. at the point of the source language (language A). Thus, during the actual development phase, the gateway debugging program 31 uses this compilation data to intercept and translate incoming requests from the debugger program 11 of the A language (using a protocol of communication with this debugging program 11 of the language A). Incoming queries are of the conventional type and may consist of static, dynamic or control flow type queries ("control flow").
Le programme de mise au point passerelle 31 transforme ces requêtes 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 1 1 du langage A, le programme de mise au point passerelle 31 peut :  The gateway debugging program 31 transforms these incoming requests so that they are understandable by the B-language development environment. More particularly, depending on the type of the incoming requests coming from the debugger program 1 1 of the language A , the gateway debugging program 31 can:
interroger directement, ou indirectement par l'intermédiaire d'un fichier idoine, le compilateur passerelle 30 du langage A vers le langage B afin d'obtenir une réponse ;  query directly, or indirectly via a suitable file, the gateway compiler 30 from the language A to the language B to obtain a response;
interroger le programme de mise au point 21 du langage B afin d'évaluer une expression particulière ;  interrogate the B language development program 21 to evaluate a particular expression;
obtenir des informations de flots de contrôle auprès programme de mise au 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. obtain control flow information from B-language debugger program 21 and transform the latter to be understandable for the A-language debugger program.
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 : Thus, using a gateway debugging program 31 and a gateway compiler 30 to debug the source software application written in A language provides several advantages:
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 ;  it is not necessary to provide a compiler of the language A to the language B which must keep as much as possible the constructions of the language A, or the different names of the program written in language A. By releasing these constraints, the compiler has more latitude to compile and optimize the program;
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 ; it is not necessary to write a debugging program for languages A and B: just use pre-existing ones; there is no need for the developer to learn, or maintain his B-language skills;
il n'est pas nécessaire pour le développeur d'apprendre un nouveau compilateur, il continue à utiliser celui associé au langage A.  it is not necessary for the developer to learn a new compiler, he continues to use the one associated with the language A.
Par la suite, on présente notamment le cas d'une utilisation du langage intermédiaire Objective-C™ et du langage source Java™. Il est clair cependant que l'invention ne se limite pas à cette application particulière, mais peut également être mise en œuvre 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.  Subsequently, we present the case of a use of the Objective-C ™ intermediate language and the Java ™ source language. It is clear, however, that the invention is not limited to this particular application, but can also be implemented in many other cases, for example from Pascal language to C language and more generally in all cases where the objectives Listed below are interesting.
5.2 Description d'un mode de réalisation  5.2 Description of an embodiment
On présente dans ce mode de réalisation, la mise en œuvre de l'invention à un programme de mise au point passerelle entre un débogueur Eclipse pour Java™ et un débogueur GDB pour Objective-C™.  In this embodiment, the implementation of the invention is presented to a gateway debugging program between an Eclipse debugger for Java ™ and a GDB debugger for Objective-C ™.
5.2.1 Phase de compilation initiale 5.2.1 Initial compilation phase
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 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 :  According to the invention, prior to debugging, the compiler, in debug mode, performs a transformation of the source code of the software application written in the source programming language into the intermediate programming language by inserting additional instructions. More particularly, the compiler of the source language to the intermediate language makes the following modifications:
Il formate le code pour que chaque ligne en langage source soit le plus 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.  It formats the code so that each line in source language is as much as possible transformed into a line of the intermediate language. This formatting makes it possible to use the 'step over' function of the debugging program of the intermediate language to make a 'step over' for the source language.
Dans le cas où le compilateur ne peut maintenir cette précédente propriété (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 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, c'est-à-dire celle où se trouve la déclaration de cette variable. In the case where the compiler can not maintain this previous property (a line in language A on a line in language B), it inserts compilation directives (ie "#line" for compilers of strain C (Objective -C, C ++, C, ...)). It will indicate that these different Lines in intermediate language come from the same line in source language. For example, if the language A supports the initialization of variable at the same time as its declaration, and the language B does not support this construction, the compiler will have to move the initialization of the variable in one or more methods of initializations. It will insert, in this case, compilation directives to indicate that these different initializations in language B come from the same line in language A, that is to say the one where the declaration of this variable is.
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. The name and line number are used, in the method of the invention, not as a pointer to an actual line of the source code, but by the gateway debugger as the unique line identifier. This line identifier will be retained, according to the invention, in the intermediate representation of the compiler so that the gateway debugging program can make the necessary conversions during the actual tuning.
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. It generates unnecessary constructs for program execution so that the gateway debugger can insert breakpoints on certain events. For example, for the Exception Management System (EMS), the A language debugger may need to know when an error is reported with an exception ("throw" keyword in some languages). In this case, it replaces all occurrences of the keyword "throw" with a call to a particular method before actually sending them. Thus, the gateway debugger is informed of all program exception shipments by inserting a breakpoint in this method. In general, it inserts a method call before each statement that generates an event whose debugger of the language A wants to know (introduction into an exception processing block, creation / destruction of a thread, introduction into a particular method, ...). Thus, the software application written in intermediate language is specifically constructed to be able to generate data that will subsequently be used by the gateway debugger. This is an important point of the invention. Buildings called 'useless' (useless because they do not fulfill a specific function in the application) are actually very useful for the gateway constructor.
5.2.2 Phase de mise au point  5.2.2 Focusing phase
Comme cela a déjà été évoqué, la phase de mise au point d'une application 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.).  As already mentioned, the development phase of a software application comprises a plurality of requests transmission step of the program of development of the language concerned. More particularly, these request transmission steps are intended to control the execution of the program and to obtain information on the state of the program (content of the variables, methods executed, 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.  According to the invention, the gateway debugger intercepts all incoming requests from the source language debugger in the debugger protocol of the source language. For this, he knows, according to the invention, the protocol used, and masquerading as the final debugger. It reacts in the same way, giving the GUI or the developer the same interactions as with a classic debugger.
5.2.2.1 Requêtes Statiques 5.2.2.1 Static Queries
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 :  For requests of static types, that is to say not asking for data depending on the execution of the program such as the names of classes, methods, fields:
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) ;  Either the gateway debugger finds the information in an information file written by the compiler (equivalent to the debug information in DWARF format for example);
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. Either the gateway debugger directly queries the compiler, which will internally search for the information needed to respond to the request; Either the gateway debugger directly uses the intermediate representation in the compiler process to find the necessary information.
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.  In all three cases, the information provided by the compiler, from an intermediate data structure (internal or external to the compiler), contains all the structural information of the program, it is then possible to ask to find the set of classes, the set of methods of instances or classes, fields of instances or classes, the set of classes contained, ... of a certain class.
5.2.2.2 Requêtes Dynamiques 5.2.2.2 Dynamic Queries
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 :  For dynamic type requests, that is, requesting data depending on the execution of the program, the gateway debugger:
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 ;  Express this request in an A language expression, for example, to know the value of a C class field of the xxx.yyy.zzz package in a Java program, it will build an expression such as xxx.yyy.zzz. C.f and will apply the same transformations that the gateway compiler would have done on such an expression;
Demande au débogueur du langage B, dans son protocole, d'évaluer cette expression. Par exemple, avec gdb-mi, il enverra la commande "-data- evaluate-expression xxx_yyy_zzz_C_f ' ;  Ask the debugger of the language B, in its protocol, to evaluate this expression. For example, with gdb-mi, it will send the command "-data- evaluate-expression xxx_yyy_zzz_C_f ';
Récupère la valeur de l ' expression et la traduit en une valeur compréhensible en langage source ;  Retrieves the value of the expression and translates it into an understandable value in source language;
Répond à la requête.  Respond to the request.
En passant (transférant) l'expression entière dans le compilateur, cela laisse une liberté totale au compilateur pour générer du code dans le langage cible. Pour illustrer ce propos, il est par exemple possible au compilateur de générer une gestion des champs de façon autonome en mémoire (avec un couple symbole + offset : xxx.yyy.zzz.C + 0x10), sans se reposer sur les champs du langage cible (avec un un symbole : xxx.yyy.zzz. C.f). En effet, les autres solutions de l'état de l'Art se reposent sur une correspondance de symboles, ce qui n'est pas le cas de l'invention. Cette propriété de l'invention est d'autant plus importante que les niveaux du langage source et du langage cible sont éloignés. By passing (transferring) the entire expression into the compiler, it gives the compiler complete freedom to generate code in the target language. To illustrate this point, it is for example possible for the compiler to generate a management of the fields autonomously in memory (with a couple symbol + offset: xxx.yyy.zzz.C + 0x10), without relying on the fields of the language target (with a symbol: xxx.yyy.zzz). Indeed, the other solutions of the state of the art rely on a correspondence of symbols, which is not the case of the invention. This property of the invention is all the more important as the levels of the source language and the target language are far apart.
Cette solution a, de plus, l'avantage de rendre indépendant le compilateur du débogueur passerelle. En effet, le débogueur passerelle n'a pas la connaissance de la correspondance entre l'expression dans le langage source et l'expression dans le langage cible, il interroge le compilateur pour cela.  This solution also has the advantage of making the compiler of the gateway debugger independent. Indeed, the gateway debugger does not have the knowledge of the correspondence between the expression in the source language and the expression in the target language, it queries the compiler for that.
Requêtes de Flot de Contrôle  Control Flow Queries
Plusieurs requêtes de contrôle de flot peuvent arriver sur le débogueur passerelle :  Several flow control requests may arrive on the gateway debugger:
- 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ébo gueur 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 II 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. - The installation of a 'Breakpoint'. The query includes a location of the breakpoint as the file name and line number in the file. The gateway debugger must retrieve the unique line identifier that the compiler to be inserted during the compilation phase as a file name and fictitious line number II must request this information from the compiler, directly or indirectly via a file , or will look for this information directly in the intermediate representation of the compiler. It will then ask to set this breakpoint to the program of debugging the intermediate language.
- 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. Il suffit alors de continuer l' exécution du programme pour assurer que la prochaine instruction exécutée sera bien arrêtée. - The 'step-over', the 'step-into', .... Thanks to the formatting of the source code in intermediate language previously done by the compiler, the gateway debugger has only to transmit the request in the protocol of the debugger of the intermediate language. If the transformation of the code of the source language into intermediate language does not make it possible to do this manipulation, or if the target debugger does not support the operation, an analysis of the control flow as described in the state of the art makes it possible to find all of the following possible instructions. The method then comprises according to the invention a step of insertion, thanks to the previous technique, breakpoints ('breakpoint') on all the following potential lines. It is then sufficient to continue the execution of the program to ensure that the next instruction executed will be stopped.
5.3 Autres caractéristiques optionnelles et avantages  5.3 Other optional features and benefits
On décrit ci-après un système de mise au point selon l'invention.  A debugging system according to the invention is described below.
Un système qui met en œuvre le procédé de l'invention comprend :  A system that implements the method of the invention comprises:
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 : means for compiling the software application written in the source language A delivering the code of an intermediate software application written in the intermediate language B. These compilation means are mainly in the form of an ad hoc compiler which can be run on a computer. This compiler however comprises, according to the 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.  means for insertion within the code of the intermediate software application written in B language, of a specific construction of interception of events occurring during the execution of the debugging program of said intermediate language B by means of additional instructions. These additional instructions are used by the gateway debugger to allow the information requested by the A language debugger to be returned.
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.  means for formatting the intermediate code of the software application so that the correspondence between a line of the source code and a line of the intermediate code is as frequent as possible. These formatting means act to ensure a construction of the intermediate program written in the B language that is as similar as possible to the original A language construct.
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. code compilation means of the intermediate software application into a software application executable on the target platform. These compilation means are mainly in the form of an ad hoc compiler that can be run on a computer. means for debugging the software application which according to the invention comprise at least means for transforming at least one debugging information between a debugging program of said intermediate language B and the program for setting the point of said source language A.

Claims

REVENDICATIONS
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 : Method for debugging a software application written in a source and executable programming language on a target platform, characterized in that it comprises:
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 : a compilation phase of said software application written in said source language delivering the code of an intermediate software application written in an intermediate language, said compilation phase furthermore comprising:
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 ;  a step of insertion within the code of said intermediate software application, of a specific construction of interception of events occurring during the execution of a debugging program of said intermediate language, by means of complementary instructions;
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 ;  a step of formatting the intermediate code of said software application so that the correspondence between a line of the source code and a line of the intermediate code is as frequent as possible;
une phase de compilation du code de ladite application logicielle intermédiaire en une application logicielle exécutable sur ladite plateforme cible ; a phase of compiling the code of said intermediate software application into a software application executable on said target platform;
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. a development phase of said software application comprising at least one step of transforming at least one debug information between a debugging program of said intermediate language and a debugging program of said source language.
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 œuvre 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 : Method according to claim 1 characterized in that said compilation phase further comprises a step of generating at least one specific representation of said software application within an intermediate data structure and in that said debugging phase implements said intermediate data structure. Focusing method according to claim 2, characterized in that said focusing phase further comprises:
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 ; a step of receiving, from said debugging program of said source language, a request to obtain at least one piece of data that does not depend on the execution of said software application, called static data;
une étape de recherche de ladite au moins une donnée statique dans ladite structure de données intermédiaires ; a step of searching for said at least one static data in said intermediate data structure;
une étape de transmission de ladite au moins une donnée statique à destination dudit programme de mise au point dudit langage source. a step of transmitting said at least one static data to said debugging program of said source language.
Procédé de mise au point selon la revendication 1, caractérisé en ce que ladite phase de mise au point comprend en outre : Focusing method according to claim 1, characterized in that said focusing phase further comprises:
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 ; a step of receiving, from said debugging program of said source language, a request for obtaining at least one data item dependent on the execution of said software application, called dynamic data;
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 programme de mise au point dudit langage intermédiaire ; a step of transforming said request for obtaining at least one dynamic data item into a request for obtaining at least one dynamic data item for said debugging program of said intermediate language, delivering a transformed obtaining request request; a step of transmitting said transformed obtaining request to said debugging program of said intermediate language;
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 ; a step of executing said obtaining request transformed by said debugging program of said intermediate language delivering said at least one dynamic datum;
une étape de transmission de ladite au moins une donnée dynamique délivrée audit programme de mise au point dudit langage source. a step of transmitting said at least one dynamic data item delivered to said debugging program of said source language.
Procédé de mise au point selon la revendication 1, caractérisé en ce que ladite phase de mise au point comprend en outre : Focusing method according to claim 1, characterized in that said focusing phase further comprises:
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 application logicielle ; a reception step, from said debugging program said source language, an execution control request of said software application;
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 ; a step of transforming said received execution control request into an equivalent execution control request for said debugging program of said intermediate language, delivering a transformed execution control request;
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. a step of transmitting said transformed execution control request of said debugging program of said intermediate language.
Procédé de mise au point selon la revendication 1, caractérisé en ce que ladite phase de mise au point comprend en outre :  Focusing method according to claim 1, characterized in that said focusing phase further comprises:
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 ; a step of receiving, from said debugging program of said source language, an event management request of said software application;
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 ; a step of transforming said received event management request into a control request on the execution of at least one complementary instruction for said debugging program of said intermediate language, delivering a transformed management request;
une étape de transmission de ladite requête de gestion transformée audit programme de mise au point dudit langage intermédiaire. a step of transmitting said transformed management request to said debugging program of said intermediate language.
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 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ôle dudit programme intermédiaire par un débogueur passerelle. A method of compiling a program written in a source programming language to an intermediate program written in an intermediate programming language, said intermediate program being itself intended to be compiled for a target platform, characterized in that it comprises a step of insertion, within said intermediate program, of at least one complementary control instruction of said intermediate program by a gateway debugger.
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 : System for debugging a software application written in a source programming language and executable on a target platform, characterized in that it comprises:
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 : means for compiling said software application written in said source language delivering the code of an intermediate software application written in an intermediate language, said compilation means comprising:
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 ;  means for inserting into the code of said intermediate software application, a specific event interception construction occurring during the execution of a debugging program of said intermediate language, by means of complementary instructions;
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 ;  means for formatting the intermediate code of said software application so that the correspondence between a line of the source code and a line of the intermediate code is as frequent as possible;
des moyens de compilation du code de ladite application logicielle intermédiaire en une application logicielle exécutable sur ladite plateforme cible ; means for compiling the code of said intermediate software application into a software application executable on said target platform;
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. means for debugging said software application comprising at least means for transforming at least one debug information between a debugging program of said intermediate language and a program for debugging said source language.
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. Computer program product downloadable from a communication network and / or stored on a computer readable medium and / or executable by a microprocessor, characterized in that it comprises program code instructions for executing the method of setting in accordance with at least one of claims 1 to 6 when executed on a computer.
EP10785435A 2009-12-03 2010-12-03 Software application fine-tuning method, system, and corresponding computer program product Withdrawn EP2507702A1 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0958607A FR2953612A1 (en) 2009-12-03 2009-12-03 METHOD FOR DEVELOPING SOFTWARE APPLICATION, SYSTEM AND CORRESPONDING COMPUTER PROGRAM PRODUCT.
PCT/EP2010/068892 WO2011067398A1 (en) 2009-12-03 2010-12-03 Software application fine-tuning method, system, and corresponding computer program product

Publications (1)

Publication Number Publication Date
EP2507702A1 true EP2507702A1 (en) 2012-10-10

Family

ID=42334653

Family Applications (1)

Application Number Title Priority Date Filing Date
EP10785435A Withdrawn EP2507702A1 (en) 2009-12-03 2010-12-03 Software application fine-tuning method, system, and corresponding computer program product

Country Status (4)

Country Link
US (1) US8776024B2 (en)
EP (1) EP2507702A1 (en)
FR (1) FR2953612A1 (en)
WO (1) WO2011067398A1 (en)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8930909B1 (en) * 2007-07-13 2015-01-06 The Mathworks, Inc. Debugging using presentation layer representations of objects
US8997049B1 (en) 2010-05-21 2015-03-31 Cadence Design Systems, Inc. Method and system for debugging of compiled code using an interpreter
US9189622B2 (en) 2013-04-30 2015-11-17 Vmware, Inc. Static redirection for objective C
US9274931B2 (en) 2013-05-06 2016-03-01 International Business Machines Corporation Inserting implicit sequence points into computer program code to support debug operations
JP6122749B2 (en) * 2013-09-30 2017-04-26 ルネサスエレクトロニクス株式会社 Computer system
US10338932B2 (en) * 2016-11-15 2019-07-02 Google Llc Bootstrapping profile-guided compilation and verification
CN109828915B (en) * 2018-12-29 2022-04-01 北京小米移动软件有限公司 Method, device, equipment and storage medium for debugging application program
US11526780B2 (en) * 2019-08-05 2022-12-13 Microsoft Technology Licensing, Llc Converting nonnative skills for conversational computing interfaces
CN112486799B (en) * 2019-09-12 2024-11-26 安徽寒武纪信息科技有限公司 Program debugging method, device and computer equipment
US11763685B2 (en) * 2020-02-28 2023-09-19 Ge Aviation Systems Llc Directing and communicating data to a flight management system
US11748233B2 (en) * 2020-04-30 2023-09-05 Red Hat, Inc. Debugging a native compiled application from an integrated development environment

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5265254A (en) * 1991-08-14 1993-11-23 Hewlett-Packard Company System of debugging software through use of code markers inserted into spaces in the source code during and after compilation

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information
JP2777496B2 (en) * 1991-02-28 1998-07-16 インターナショナル・ビジネス・マシーンズ・コーポレイション Uses when profiling multi-processes in computer systems
US5581696A (en) * 1995-05-09 1996-12-03 Parasoft Corporation Method using a computer for automatically instrumenting a computer program for dynamic debugging
US5850550A (en) * 1995-08-31 1998-12-15 International Business Machine Corporation No preprocessor and a source level debugger for embedded SQL in a 3GL
JP3196675B2 (en) * 1996-12-27 2001-08-06 日本電気株式会社 Language processing method
US6311327B1 (en) * 1998-03-02 2001-10-30 Applied Microsystems Corp. Method and apparatus for analyzing software in a language-independent manner
KR20010072477A (en) * 1998-08-13 2001-07-31 썬 마이크로시스템즈, 인코포레이티드 Method and apparatus of translating and executing native code in a virtual machine environment
US20020116699A1 (en) * 2000-12-18 2002-08-22 Armin Amrhein Apparatus and method for checking the status of control systems
US20030126590A1 (en) * 2001-12-28 2003-07-03 Michael Burrows System and method for dynamic data-type checking
JP2005174045A (en) * 2003-12-12 2005-06-30 Sharp Corp Source program conversion device, source program conversion method, source program conversion program and program recording medium
JP2006243838A (en) * 2005-02-28 2006-09-14 Toshiba Corp Program development device
US7721196B2 (en) * 2005-12-07 2010-05-18 Microsoft Corporation Arbitrary rendering of visual elements on a code editor
US8095917B2 (en) * 2007-06-04 2012-01-10 Microsoft Corporation Debugger for virtual intermediate language operations
US20080320457A1 (en) * 2007-06-19 2008-12-25 Microsoft Corporation Intermediate Code Metrics
US8181167B2 (en) * 2008-01-09 2012-05-15 Kan Zhao Method and system for presenting and analyzing software source code through intermediate representation
US9703678B2 (en) * 2008-12-23 2017-07-11 Microsoft Technology Licensing, Llc Debugging pipeline for debugging code

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5265254A (en) * 1991-08-14 1993-11-23 Hewlett-Packard Company System of debugging software through use of code markers inserted into spaces in the source code during and after compilation

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See also references of WO2011067398A1 *

Also Published As

Publication number Publication date
US20120304154A1 (en) 2012-11-29
WO2011067398A1 (en) 2011-06-09
FR2953612A1 (en) 2011-06-10
US8776024B2 (en) 2014-07-08

Similar Documents

Publication Publication Date Title
WO2011067398A1 (en) Software application fine-tuning method, system, and corresponding computer program product
US11422778B2 (en) Development environment for real-time dataflow programming language
O’kane MTS-417 LAB-A Gentle Introduction to ROS
Schmidt et al. Pattern-oriented software architecture, patterns for concurrent and networked objects
US8156473B2 (en) Model oriented debugging
CN109564540B (en) System, method, and apparatus for debugging of JIT compiler
US10209968B2 (en) Application compiling
US20090024986A1 (en) Runtime code modification
US10997062B1 (en) System and method for implementing an automated regression testing module
EP2652609A2 (en) Fusing debug information from different compiler stages
WO2010009996A1 (en) Method for compiling a computer program
FR2798204A1 (en) CLOSED INTERRUPTION POINTS AND METHOD OF DEBUGGING COMPUTER PROGRAMS
US8196107B2 (en) Simulating stepping through interpreted code
CN112395098A (en) Application program interface calling method and device, storage medium and electronic equipment
CN113360377B (en) Test method and device
KR20060094851A (en) System and method for testing data format using targeted variable input
US8943483B2 (en) Application programming interface naming using collaborative services
WO2014197258A1 (en) Declarative configuration elements
Liu EUDAQ2 user manual
Sazanavets Microservices Communication in. NET Using GRPC
Wu et al. Heron Streaming: Fundamentals, Applications, Operations, and Insights
WO2020128363A1 (en) System for formally monitoring communications
Horemans et al. Elmsvuur: A multi-tier version of elm and its time-traveling debugger
Felgentreff et al. Implementing record and refinement for debugging timing-dependent communication
CN114647438A (en) Method, device, medium and computing equipment for generating and loading file package

Legal Events

Date Code Title Description
PUAI Public reference made under article 153(3) epc to a published international application that has entered the european phase

Free format text: ORIGINAL CODE: 0009012

17P Request for examination filed

Effective date: 20120604

AK Designated contracting states

Kind code of ref document: A1

Designated state(s): AL AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MC MK MT NL NO PL PT RO RS SE SI SK SM TR

DAX Request for extension of the european patent (deleted)
17Q First examination report despatched

Effective date: 20160203

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: THE APPLICATION IS DEEMED TO BE WITHDRAWN

18D Application deemed to be withdrawn

Effective date: 20160614

P01 Opt-out of the competence of the unified patent court (upc) registered

Effective date: 20230520