Debugging applications is known to be a difficult task. Debugging parallel applications is even harder due to the distributed nature of parallel processing. Furthermore, when a problem appears only on thousands of processors, modern parallel debuggers are unusable since they become too slow at such scale. In this talk I will present scalable techniques to improve the proficiency of debugging parallel applications in the context of message-passing. As the ambiguity of the title suggests, I will focus on two issues. On one side, how to debug parallel applications that leverage the concept of virtualization as a way of parallelization. On the other hand, how we can effectively employ virtualization techniques to debug applications on very large systems using fewer processors. These techniques will be presented in the context of the Charm++ runtime system, and CharmDebug, the parallel debugging tool tailored to Charm++ applications.