Rmdebug
When writing C programs many of the bugs are memory related. They may result in strange behaviour which can arouse far away from the erroneous position.
I once spent about thirty hours hunting for an annoying bug. The setting was bad. In a big project where a program (for which we don't had the source) read in libraries (written by us) at runtime and then used them a segmentation fault occured my part when allocating memory. I had just written some arcane stuff concerning binary file i/o and wasn't surprised that much. Of course it was not possible to use a debugger and we had to switch to good old printf and visual trace (step the code in wetware memory line by line) debugging. But I did not find nothing, everything seemed wonderful -- except that the program still kept crashing.
It was a weekend and I hadn't had Internet access that time (it's seems so long ago that I remember dinosaurs stamping by my window). So I wrote the first version of the malloc debug library to see what happened. I linked it to my library and -- did not find anything. So at last (it was a weekend) I linked it to the libraries of my coworkers and indeed there was a off-by-one error in someone else's library. We love C, don't we?
Since then I always use it in my projects from the very beginning and do only switch it off for release versions. It's an unrenouncable improvement to find memory bugs as early as possible without doing any more extra work than including a header and setting a command line switch in the Makefile.