Débogage symbolique multi-langages pour les plates-formes d'exécution généralistes
Damien Ciabrini · HAL (Le Centre pour la Communication Scientifique Directe) · 2006
This thesis is devoted to improving symbolic debuggers so that they can deal with the specifics of high-level languages, in particular their complex compilation to general-purpose execution platforms. This has led to the implementation of Bugloo, a language-agnostic debugger for the Java virtual machine. Two novels virtualization mechanisms are introduced in order to mask artifacts that show up in the stack due to the compilation of high-level languages. The first one is an algorithm that uses special rules designed by language implementors to maintain a mapping between the source code of a program and the code generated during its compilation. It allows the debugger to reconstruct a logical view of the stack into which the compilation details have been filtered out. The second mechanism provides a means to control single stepping, in order to disallow execution to stop in intermediate functions that were generated by the compiler. These virtualization mecanisms have been implemented in a memory profiler for producing special statistics that only contain user-level functions. During this work, a complete debugging support has been developed for Bigloo, a dialect of the functional language Scheme. Other experiments have been conducted on the high-level languages ECMAScript and Python. Results show that our virtualization mecanisms can be efficiently applied whatever the compilation scheme is. Moreover, they remain effective when programs are composed of several high-level languages.