EP2507702A1 - Software application fine-tuning method, system, and corresponding computer program product - Google Patents
Software application fine-tuning method, system, and corresponding computer program productInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000004590 computer program Methods 0.000 title claims description 8
- 230000000295 complement effect Effects 0.000 claims abstract description 10
- 238000010276 construction Methods 0.000 claims abstract description 9
- 238000011161 development Methods 0.000 claims description 16
- 230000003068 static effect Effects 0.000 claims description 11
- 230000001131 transforming effect Effects 0.000 claims description 11
- 238000003780 insertion Methods 0.000 claims description 7
- 230000037431 insertion Effects 0.000 claims description 7
- 238000004891 communication Methods 0.000 claims description 4
- 230000001419 dependent effect Effects 0.000 claims description 2
- 230000018109 developmental process Effects 0.000 description 15
- 230000008901 benefit Effects 0.000 description 4
- 230000009466 transformation Effects 0.000 description 4
- 238000012937 correction Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000008140 language development Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 101100219321 Oryza sativa subsp. japonica CYP85A1 gene Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3624—Debugging of software by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3636—Debugging of software by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software 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.
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)
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)
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)
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 |
-
2009
- 2009-12-03 FR FR0958607A patent/FR2953612A1/en not_active Ceased
-
2010
- 2010-12-03 WO PCT/EP2010/068892 patent/WO2011067398A1/en active Application Filing
- 2010-12-03 US US13/513,452 patent/US8776024B2/en active Active
- 2010-12-03 EP EP10785435A patent/EP2507702A1/en not_active Withdrawn
Patent Citations (1)
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)
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 |