2009-09-16
Post date: Sep 16, 2009 10:02:54 PM
Objective
- Learn how to use a debugger, and use it to examine bit-manipulation algorithms to study how the code works. Each source file provided has a regular, obvious version, and a fast, not-so-obvious version.
Important: in order to generate an executable that is suitable for source-code level debugging, you must pass the -g flag to gcc when compiling. Otherwise gdb could only provide debugging at machine code instruction level.
Exercises
- Count the number of "one" bits in an integer's binary representation (see countbits.c attached). For a text-book explanation of how the fast version works, see Hacker's Delight by Henry S. Warren.
- Compute the next power of 2 that is greater than or equal to a given integer (take home exercise, see next poweroftwo.c attached). See Algorithm to find the next-highest power of two in Wikipedia for an explanation of how the fast version works.
Emacs commands:
- C-x C-c (quit)
- C-x C-s (save)
- C-k (cuts from cursor to end of line)
- C-y (paste)
- See Enabling Font Lock for how to turn on syntax coloring.
GDB commands:
- r (run) start over the program.
- c (continue) execute from where we last stopped.
- n (next) runs one line of code; executes functions like one instruction and does not step into the function.
- s (step) runs one line of code; steps into function calls.
- b (breakpoint) makes gdb stop at a certain location when execution passes through it.
- b count_one_bits /* break at function */
- b countbits.c:4 /* break in file countbits.c at line number 4 */
- p (print) a variable or an expression. Examples:
- p i /* prints variable i */
- p /x n /* prints variable n in hexadecimal */
- p (n & 1) /* prints the result of (n & 1) */
- h (help)
- q (quit)
Fun
- Real programmers (emacs vs. vim) [xkcd.com]