In this lab, you will learn to use debugging tools such as gdb,
assert, and -D_GLIBCXX_DEBUG
.
Consider the following program, bad.cc
. It opens resolv.conf
,
and prints out the line that starts with “search”. It has several errors
(don’t rob others of the joy of discovery—keep it to yourself):
#include <fstream> #include <iostream> #include <string> #include <cassert> using namespace std; int main() { string filename = "\etc\resolv.conf"; // A stupid line just to introduce an error: cout << "The 3rd character is " << filename[100000003] << '\n'; ifstream in(filename.c_str()); assert(in.is_open()); string s; while (getline(in, s)) { string prefix = s.substr(1,6); if (prefix == "search") cout << s << '\n'; } return 0; }
When the program works, it prints something like this:
search cs.colostate.edu colostate.edu
bad.cc
.
g++ bad.cc
filename[100000003]
g++ -D_GLIBCXX_DEBUG bad.cc
[100000003]
to [3]
.
g++ -DNDEBUG bad.cc
g++ -ggdb bad.cc
gdb ./a.out
b 14
(your line number may vary)
r
filename
, like this: p filename.c_str()
filename
has that value. Fix the source.
if (prefix == "search")
line.
s
and prefix
the same way that you printed the value of filename
.
For extra fame & glory:
Modified: 2013-01-31T17:32 User: Guest Check: HTML CSSEdit History Source |
Apply to CSU |
Contact CSU |
Disclaimer |
Equal Opportunity Colorado State University, Fort Collins, CO 80523 USA © 2015 Colorado State University |