Increased reuse of software components has led to a software mishmash as existing packages are used as building blocks for new systems. Current debuggers cannot cope with the intricate interactions between components written in different languages and spread over multiple hosts. This paper explores the design of a pervasive debugger for concurrent and distributed applications. By executing the target in a virtualized environment, the debugger can atomically control the entire application, stopping and examining each component in a consistent state. Developers can simultaneously control multiple heterogeneous targets located anywhere in the software hierarchy. Categories and Subject Descriptors: D.2.5 [Software Engineering]: Testing and Debugging—Debugging aids, distributed debugging; D.3.4 [Programming Languages]: