Posted by Senthil Kumaran | Filed under debugging, books
This is summary of the Debugging chapter in The Practice of Programming by Brian Kernighan and Rob Pike. It was an absolute pleasure for me to read this paragraph, I have spent tons of time in debugging issues both in CPython and at work. The master programmers provide a great insight into the process of Debugging.
With the right attitude debugging can be fun, like solving a puzzle, whether we enjoy it or not, debugging is a art that you need to practise regularly. Still, it would be nice, if bugs didn't happen, so we try to avoid them by writing code well in the first place. Well written code has fewer bugs to begin with and those that remain are easier to find. Once a bug has been seen, the first thing to do is to think hard about the clues it presents. How could it have come about? Is it something familiar? Was something just changed in the program? Is there is something special about the input data that provoked it? A few well chosen test cases and few print statements in the code may be enough. If there aren't any good clues, hard thinking is still the best first step, to be followed by systematic attempts to narrow down the location of the problem. One step is cutting down the input data to make a small input that that fails; another is cutting out code to eliminate regions that can't be related. It's possible to insert checking code that gets turned on only after the program is executed some number of steps, again to try to localize the problem. All of these are instances of general strategy, divide and conquer, which as effective in debugging as it is politics and war. Use other aids as well. Explaining your code to someone else (even a teddy bear) is wonderfully effective. Use a debugger to get a stack trace. Use some of the commercial tools that check for memory leaks, array bound violations, suspect code and the like. Step through your program when it has become clear that you have the wrong mental picture of how the code works. Know yourself, and kinds of errors you make. Once you have found and fixed a bug, make sure you eliminate other bugs that might be similar. Think about what happened so you can avoid making that kind of mistake again.
And finally there was statement in the chapter which is very sums up what a good bug writing technique is.
Send the kind of bug report you'd like to receive yourself.