An Extensible Debugging Architecture Based on a Hybrid Debugging Framework

Presenter: Ziad Al-Sharif, UI

Abstract:

The cost of writing debuggers is very high. Most debuggers are written employing low level operating system and hardware specific code, which is hard to port to new platforms or architectures and to extend with new debugging techniques. Moreover, current debuggers are usually limited in the amount of analysis that they perform and the level of detail that they provide in order to assist with debugging. Most debuggers are well suited for a specific class of bugs. Different bugs call for different debugging techniques, so experimentation is needed in order to develop the features that will someday be widely adopted in debuggers. We are advancing the state of the art with three primary contributions.

First, we introduce an event-driven debugging framework named AlamoDE (Alamo-Debug Enabled). The role of this framework is analogous to an abstraction layer upon which to build debuggers. AlamoDE 1) provides in-process debugging support with simple communication and no intrusion on the buggy program space, 2) enables debugging tools to be written at a high level of abstraction, and 3) facilitates developers of experimental automatic debugging features in a very high level language. AlamoDE supports construction of a variety of user-defined debugging tools that range from classical source-level debuggers to automated and dynamic analysis techniques. Second, invent an extensible agent-based debugging architecture named IDEA (Idaho Debugging Extension Architecture). IDEA offers novel debugging techniques that break the rigidness, closeness, and inextensibility of most current debugging paradigm. It provides programmers with the ability to easily implement, test, and combine user-defined debugging agents, and offers simple dynamic and static extension mechanism. Finally, build a production source-level debugger for the Unicon language named UDB. UDB leverages the classical interactive debugging process with 1) built-in agents employing automatic detection and dynamic analysis techniques, 2) a simple interface to load, unload, enable, and disable separately-compiled dynamically-loaded external debugging agents that work in conjunction with the conventional source-level debugging session and its internal agents, and 3) dynamic temporal assertions that assert runtime properties across different points during execution. While IDEA simplifies a source-level debugger's extensibility and eases its usability, debugging agents add indispensable value with moderate impact on the performance of the debugger. Different agents can work in concert with each other to provide programmers with better understanding of the program's execution behavior and simplify the process of debugging and hunting for elusive and hard to catch bugs.