"Debugging is the process of turning mysteries into errors" - Clay Shirky
Debugging refers to different methods and tools for checking your assumptions and finding errors in your code. Here are a few strategies that do not require use of advanced tools to help in the process.
This technique requires you describe the parts of your code to a rubber duck, or other inanimate object. Many programmers have had the experience of explaining a problem to someone else, possibly even to someone who knows nothing about programming, and then hitting upon the solution in the process of explaining the problem. In describing what the code is supposed to do and observing what it actually does, any incongruity between these two becomes apparent. More generally, explaining a subject forces its evaluation from different perspectives and can provide a deeper understanding. By using an inanimate object, the programmer can try to accomplish this without the help of anyone else.