Debugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program.

Debugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware, thus making it behave as expected. Debugging tends to be harder when various subsystems are tightly coupled, as changes in one may cause bugs to emerge in another. Many books have been written about debugging, as it involves numerous aspects, including interactive debugging, control flow, integration testing, log files, monitoring (application, system), memory dumps, profiling, Statistical Process Control, and special design tactics to improve detection while simplifying changes.

Applications for Debugging:

  • WinDbg - A debugger for low-level debugging, mostly used for production debugging and difficult error solving.
    • WinDbg also contains extensions for .Net debugging like ".Sos", ".SosEx" and more...
  • OllyDbg - An assembly debugger mostly used for reverse engineering and cracking.
    • Note that as for February 2014 OllyDbg only support 32 Bit application debugging.

Learning Sources:

Books: