14.1.1 Debugging in General
(If you have used debuggers in other languages, you may want to skip
ahead to the next section on the specific features of the
Of course, a debugging program cannot remove bugs for you, since it has
no way of knowing what you or your users consider a “bug” and what is a
“feature.” (Sometimes, we humans have a hard time with this ourselves.)
In that case, what can you expect from such a tool? The answer to that
depends on the language being debugged, but in general, you can expect at
least the following:
- The ability to watch a program execute its instructions one by one,
giving you, the programmer, the opportunity to think about what is happening
on a time scale of seconds, minutes, or hours, rather than the nanosecond
time scale at which the code usually runs.
- The opportunity to not only passively observe the operation of your
program, but to control it and try different paths of execution, without
having to change your source files.
- The chance to see the values of data in the program at any point in
execution, and also to change that data on the fly, to see how that
affects what happens afterwards. (This often includes the ability
to look at internal data structures besides the variables you actually
defined in your code.)
- The ability to obtain additional information about your program’s state
or even its internal structure.
All of these tools provide a great amount of help in using your own
skills and understanding of the goals of your program to find where it
is going wrong (or, for that matter, to better comprehend a perfectly
functional program that you or someone else wrote).