Files
NoteNextra-origin/content/CSE332S/CSE332S_L7.md
2025-07-06 12:40:25 -05:00

2.1 KiB
Raw Blame History

CSE332S Lecture 7

Debugging

Debugger lets us:

  1. Execute code incrementally a. Line by line, function to function, breakpoint to breakpoint
  2. Examine state of executing program a. Examine program call stack b. Examine variables

When to debug:

  1. Trace how a program runs
  2. Program crashes
  3. Incorrect result

Basic debugging commands

Set breakpoints Run program - program stops on the first breakpoint it encounters From there:

  • Execute one line at a time

  • Step into (step out can be useful if you step into a function outside of your code)

  • Step over

  • Execute until the next breakpoint (continue)

While execution is stopped:

  • Examine the state of the program
    • Call stack, variables, ...

Lots of power, but where to start?

Stepping through the entire program is infeasible

Think first!!!

  • What might be going wrong based on the output or crash message?
  • How can I test my hypothesis?
    • Can I narrow down the scope of my search?
    • Can I recreate the bug in a simpler test case/simpler code?
  • Set breakpoints in smart locations based on my hypothesis

Todays program

A simple lottery ticket game

  1. User runs the program with 5 arguments, all integers (1-100)
  2. Program randomly generates 10 winning numbers
  3. User wins if they match 3 or more numbers

At least thats how it should run, but you will have to find and fix a few issues first

First, lets look at some things in the code

  • Header guards/pragma once
  • Block comments: Who wrote this code? and what does it do?
  • Multiple files and including header files
    • Do not define functions in header files, declarations only
    • Do not #include .cpp files
    • Function or data type must be declared before it can be used

Header Guards

#pragma once // alternative to traditional header guards, don't need to do both.
#ifndef ALGORITHMS_H
#define ALGORITHMS_H
#include<vector>
void insertion_sort(std::vector<int> & v);
bool binary_search(const std::vector<int> & v, int value);
#endif // ALGORITHMS_H

The header guard is used to prevent the header file from being included multiple times in the same file.