Teaching‎ > ‎CS210 Fall 2009 TF‎ > ‎


posted Sep 16, 2009, 3:02 PM by Likai Liu   [ updated Sep 17, 2009, 10:07 AM ]
  • 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.

  • 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)
Likai Liu,
Sep 16, 2009, 3:25 PM
Likai Liu,
Sep 16, 2009, 3:25 PM