update
This commit is contained in:
@@ -1 +1,79 @@
|
|||||||
# Lecture 7
|
# Lecture 7
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
Debugger let’s 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
|
||||||
|
|
||||||
|
### Today’s 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 that’s how it should run, but you will have to find and fix a few issues first
|
||||||
|
|
||||||
|
First, let’s 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
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#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.
|
||||||
|
|||||||
@@ -1 +1,5 @@
|
|||||||
# Lecture 8
|
# Lecture 8
|
||||||
|
|
||||||
|
## From procedural to object-oriented programming
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user