Dynamic Query-Based Debugging of Object-Oriented Programs