Thank You, GDB!
I program in C very reluctantly. I don't hate the language, but it occupies a curious niche between assembly language (where you can do absolutely anything, if you're willing to write it yourself, and
eval is trivial) and a true high level language (where you can do absolutely anything, you don't have to write it yourself, and
eval is available for everything else). Yet it's ubiquitous, it has a lot of libraries, and it's probably the best way to write reasonably efficient code that has to run on plenty of platforms.
Because I'm writing a lot more C code lately (and of that, finding and fixing a lot of bugs), I've spent a lot of time using the GNU debugger GDB.
As a reluctant programmer in general, I spent many years happily debugging with print statements, and then plenty of years debugging with comprehensive test cases. When you're writing a virtual machine and your test cases are all in a high level language, you don't always have that luxury, especially when you have segfaults.
I already knew the value of backtraces, breakpoints, and printing the value of local variables. Then I forced myself to learn a few more tricks to make the most of the debugger. For example, breakpoints can take conditions. That is, you can write
break src/exceptions.c:59 if exception->type == exception_class_NULLACCESS. Learning that alone paid off several times over.
The other feature I forget after a couple of months away from marathon debugging sessions is that
p can dereference a pointer to a struct. That is, if you have a
Coord pointer in the variable
p *coords to see a serialized version of the struct and its contents. Handy!
I could talk more about using
down to walk up and down the call stack after a breakpoint, but even learning only three or four useful commands has already cut out hours of debugging time in the past month. (I even found myself wishing for a better debugger in one of the HLLs I was working on.)
Thanks to all of the contributors to GNU GDB and its ecosystem; you've made it easier for me to write further free software.
A couple of years ago my hippy father in law gave our young son a kids' book called "Thank You Sun, Thank You Moon" which was full of thank yous to all sorts of things (thank you water, thank you birds - you get the picture), and every time I see an entry in this series of yours it makes me think of that.
|Ever tried debugging Visual studio!|
Then do yourself a favor and try it with DDD
Being lazy, reluctant to read documentation, I still figured out how to make a breakpoint (double click on the line), watch and examine a variable / structure, or backtrack the function calls after a core dump.
To me, using a debugger without a graphical font end, is like writing machine code instead of C.
|Following on from DDD, use Delta Debugging. They've the same author IIRC.|
|GDB is probably the life saving took for all C programmers. The more you talk the less it is. All for free. I am a huge fan of free-software and intent to write more about them in my blogs. Interesting I have an article on GDB now at my blog.|