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].
assert failure.
g++ -DNDEBUG bad.cc
gdb: 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.
string::substr.
For extra fame & glory:
ddd.