Dynamic Analysis Techniques For Effective And Efficient Debugging