Le débogage de code optimisé dans le contexte des systèmes embarqués

par Hugo Venturini

Thèse de doctorat en Informatique

Sous la direction de Jean-Claude Fernandez.

Soutenue en 2008

à l'Université Joseph Fourier (Grenoble) .

    mots clés mots clés


  • Résumé

    Les optimisations jouent un rôle majeur dans la compilation des programmes embarqués. Elles interviennent à tous les niveaux, et sur les différentes représentations intermédiaires. En effet, les systèmes embarqués imposent souvent de lourdes contraintes à la fois sur l'espace disponible en mémoire et sur la puissance de calcul utilisable. La structure habituelle d'un compilateur lui fait collecter les informations de débogage au début du processus de compilation, pour les ajouter au fichier binaire à la toute fin. De ce fait, si le programme est modifié par les optimisations, les informations de débogage présentes dans le fichier binaire sont en partie incorrectes. Or le débogueur s'appuie sur ces informations afin de répondre aux requêtes de l'utilisateur. Si elles ne correspondent plus à la réalité du programme, les informations données à l'utilisateur seront erronées. Ainsi la méthode classique de débogage de programme est de développer sans optimisation de compilation durant la phase de mise au point et quand le produit est prêt à être livré, le compiler avec le maximum d'optimisations. Cette méthode ne convient pas au cycle de développement dans le contexte des systèmes embarqués. Notre approche est de présenter l'exécution du programme optimisé au développeur, de manière à ce qu'il comprenne aisément le lien avec le code source, malgré les transformations appliquées par le compilateur. L'idée est de ne pas émuler l'exécution du programme non-optimisé à partir de l'exécution du programme optimisé. Le développeur de programmes embarqués a des connaissances que nous allons exploiter. À partir d'une analyse de l'état de l'art du débogage de code optimisé et des outils fournis par STMicroelectronics, nous avons cherché à développer une solution viable industriellement. Notre parti est de montrer la réalité à l'utilisateur, de faire ce que P. Zellweger et J. Hennessy ont défini comme étant du débogage non-transparent. Il offre au développeur la possibilité de comprendre l'exécution de son programme. Afin de tracer les modifications effectuées par le compilateur, nous proposons d'étiqueter chaque instruction du code source lors de la compilation. Il s'agit ensuite pour le compilateur de maintenir de manière précise les étiquettes utilisées par optimisation et de propager cette information tout au long de la compilation. Ajoutées au fichier binaire en tant qu'informations de débogage, elles sont ensuite utilisées par le débogueur afin de répondre sans erreurs aux interrogations de l'utilisateur. L'ensemble des expérimentations est fait sur le compilateur mmdspcc et l'infrastructure IDbug.


  • Résumé

    Optimizations play a major role in the process of compilation for embedded programs. They are to be found at every level, working on different intermediate representations. From the size of run-time memory usage to the available power of execution, embedded systems usually constrain the execution of programs they run. The common structure of a compiler is to collect debugging information at the very beginning of the compilation. It later adds it to the binary file, after having optimized the program, i. E. Modified its internal structure. Thus, the debugging information is inaccurate. Since debuggers rely on it, their answers will be wrong. The standard method for development is to work without optimizations until the release. At delivery, optimizations are turned on, rarely before. Our approach is to reveal the execution of the optimized program to the user so the latter understands the mapping to the source code in spite of transformations applied to the program. We do not emulate the execution of the unoptimized program. We make good use of the programmer's knowledge of its development platform. From the analysis of the state of the art of the debugging of optimized code, we developed an industry-oriented solution. Our goal is to reveal the reality to the user thanks to so-called non-transparent debugging. It allows the developer to understand the execution of the program. In order to trace optimizations, we label every single statement from the source code and then enrich this labeling during compilation. Added to the binary file, this information is read by the debugger to enable it to answer the user's queries upon the program states. We present our experiment made on the mmdspcc and IDbug, tools provided by STMicroelectronics.

Consulter en bibliothèque

La version de soutenance existe sous forme papier

Informations

  • Détails : 1 vol. ( 126 p.)
  • Notes : Publication autorisée par le jury
  • Annexes : Bibliogr. 67 réf.

Où se trouve cette thèse ?

  • Bibliothèque : Service interétablissements de Documentation (Saint-Martin d'Hères, Isère). Bibliothèque universitaire de Sciences.
  • Disponible pour le PEB
  • Cote : TS08/GRE1/0031/D
  • Bibliothèque : Service interétablissements de Documentation (Saint-Martin d'Hères, Isère). Bibliothèque universitaire de Sciences.
  • Disponible sous forme de reproduction pour le PEB
  • Cote : TS08/GRE1/0031
Voir dans le Sudoc, catalogue collectif des bibliothèques de l'enseignement supérieur et de la recherche.