Sample code:
============================================================================//Name:cpp.cpp//Author:w Eijl//Version://Copyright:your Copyright notice//Description:hello World in C + +, Ansi-style//=========== ================================================================= #include <iostream> #include <string
> #include <vector> #include <map> using namespace std;
#define PI 3.1415926 const int week= 7;
Const string Name= "Weijl";
static double score= 99.0;
Class CMyData {Public:cmydata () {a = 0;
str = string ("Weijl");
c = 65;
} ~cmydata () {} int A;
String str;
float C;
int Geta () {return A;
String Getstr () {return str;
Float getc () {return C;
} void Setmv () {m_v.push_back ("Weijl");
M_v.push_back ("Shenzhen");
M_v.push_back ("Nanning");
M_v.push_back ("C + + program");
} public:typedef vector<string> vs;
typedef vector<string>::iterator IT;
VS M_v;
}; INT Main () {cout << "!!! Hello World!!! "<< Endl; Prints!!!
Hello World!!!
CMyData data;
cout << data.a << endl << data.str << endl << data.c << Endl;
DATA.SETMV ();
Cmydata::vs v = data.m_v;
Cmydata::it It = V.begin ();
while (it!= v.end ()) {string s = *it;
cout << s << endl;
it++;
return 0; }
In GDB, if you want to print the contents of a C + + STL container, the default display results are poor readability:
After GDB 7.0, you can use the Python script provided by GCC to improve the display results:
Some distributions (Fedora 11+) do not require additional setup work. Can be validated at the GDB command line (if not shown, set in the following ways).
(GDB) Info pretty-printer
Method:
1. Download a Python tool with SVN.
SVN Co Svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
When you're done, you'll get a directory named Python in the current directory.
Then you can move it to the right place, like moving to the ~/lib/gdb_printers/directory.
2. Open the file ~/.gitinit file. If not, create it.
Input
[plain] view plain copy python import sys sys.path.insert (0, '/home/yourname/lib/gdb_printers/python ') fr The path required for the OM libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) End file ~/.gdbinit Match the path of the Python module installation, that is, ~/lib/gdb_printers/python, mine is/home/weijl/lib/gdb_printers/python.
The above is done, now to see the debugging results of GDB:
weijl@ubuntu:/home/share/work/src$ gdb./hello
GNU gdb (Ubuntu/linaro 7.4-2012.02-0ubuntu2) 7.4-2012.02
Copyright (C) Free Software Foundation, Inc.
License gplv3+: GNU GPL version 3 or later This is the free software:you are and redistribute it.
There is NO WARRANTY and to the extent permitted by. Type "Show copying"
and "Show warranty" for details.
This is GDB was configured as "I686-linux-gnu".
For bugs reporting instructions, please:
Reading symbols From/home/share/work/src/hello...done.
(GDB) L
The public:
the typedef vector<string> vs;
typedef vector<string>::iterator IT;
61
M_v vs.
63};
64
the int main () {
66
cout << "!!! Hello World!!! "<< Endl; Prints!!! Hello World!!!
(GDB)
68
CMyData data;
cout << data.a << endl << data.str << endl << data.c << Endl;
71
DATA.SETMV ();
Cmydata::vs v = data.m_v;
Cmydata::it It = V.begin ();
while (it!= v.end ())
76 {
A string s = *it;
(GDB)
cout << s << endl;
79
it++;
81}
82
0;
Down} (GDB)
Line number is out of range;./hello.cpp has lines.
(GDB) b 75
Breakpoint 1 at 0x8048bde:file/hello.cpp, line 75.
(GDB) B 80
Breakpoint 2 at 0x8048c1d:file/hello.cpp, line 80.
(GDB) B 83
Breakpoint 3 at 0x8048c74:file/hello.cpp, line 83.
(GDB) R
Starting program:/home/share/work/src/hello
!!! Hello World!!!
0
Weijl
65
Breakpoint 1, Main () at./hello.cpp:75
while (it!= v.end ())
(GDB) P data
$ = {A = 0, str = "Weijl", c = m_v = Std::vector of length 4, capacity 4 = {"Weijl", "Shenzhen", "Nanning", "C + + Prog Ram "}}
(GDB) P V
$ = std::vector of length 4, capacity 4 = {"Weijl", "Shenzhen", "Nanning", "C + + program"}
(GDB) C
Continuing.
Weijl
Breakpoint 2, Main () at./hello.cpp:80
it++;
(GDB) P s
$ = "Weijl"
(GDB) Delete 2
(GDB) C
Continuing.
Shenzhen
Nanning
C + + Program
Breakpoint 3, Main () at./hello.cpp:83
0;
(GDB) P/R V
$ = {<std::_vector_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> ", Std::allocator<std::basic_string<char, Std::char_traits<char>, std::allocator<char> > > >> = {
_m_impl = {<std::allocator<std::basic_string<char, std::char_traits<char>, Std::allocator<char > > >> = {<__gnu_cxx::new_allocator<std::basic_string<char, std::char_traits<char>, std:: allocator<char> > >> = {<no data fields>}, <no data fields>}, _m_start = 0x804d0e0, _m_finish = 0x804d0f0, _m_end_of_storage = 0x804d0f0}}, <no data fields>}
(GDB)
Reference:
Click to open the link
Click to open the link