As software continues to grow in complexity, an important requirement that is emerging is software must be able to change at run-time. Unfortunately, software engineering techniques that are useful in building robust dynamically modified software are woefully lacking. In general, extensive testing and debugging are the traditional ways of ensuring the robustness of sofware. The problem of debugging a program where the underlying code is changing at run-time makes the problem all the more difficult.
The aim of this proposed research is to address this situation and develop new techniques for debugging dynamically modified software. The key idea is that debugging for such software must extend through the code modification and allow debugging on code that has been changed and to see how past and future adaptations has/can affect execution. The proposed work considers several types of dynamic code modifications, including dynamically optimized code, dynamically applied code patches, components and dynamically linked libraries. New debug directives and queries will be developed specifically to address the challenges of debugging such code. Novel techniques based on code analysis, reverse execution, checkpointing, and instrumentation optimization will be used to enable these new directives and queries.
This research has both fundamental and software contributions, including: (1) a better understanding of the constraints and trade-offs that exist for developing robust dynamically modified software, (2) a framework that supports the construction of debugging techniques and tools that are useful when developing dynamically software, (3) the development of debug strategies, directives and queries that are designed to handle the special challenges of dynamically modified code, and (4) the development of a set of debugging tools for dynamic software that will be widely distributed. The techniques, tools and algorithms that will be developed through the course of this research will contribute significantly to understanding how modern software development techniques can be incorporated with dynamic code modifications.