1.在Debug之前,编译时允许debug.

g++ -g xxx.cpp -o xxx

2.使用gdb来debug,常用命令:

gdb xxx    #开始debug
break   #设置断点
    break function-name/line-number/ClassName::funcName
delete/d  #删除断点
    delete 删除所有断点,观察点,捕捉点
    delete breakpoint-number-or-range
run     #开始运行

where    #显示当前执行和所在函数
next/n    #执行下一条语句,不进入函数
continue/c #执行到下一个 断点 前
until
    until line-number
step/s    #执行下一条语句,会进入函数
finish    #执行到当前函数结束

info
    info frame
    info args
    info locals

list/l    #列出代码
    list line-number/function/start#,end#

print/p    #打印变量的值
    print variable-name
    print *array-variable@length

quit/q    #退出GDB

3.gdb对STL的支持.

使用GDB打印vectorstack等抽象STL数据结构是,打印出的内容是无意义的。而GDB 7.0就支持 pretty-printers. 把pretty-printers 和 libstdc++ 组合起来就产生了打印 C++ 容器的最好工具,具体操作如下:

1.将Python libstdc++ printer check out 到本地。
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
2.把以下内容加到~/.gdbinit.
python
import sys
sys.path.insert(0, '/path/to/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end    
注意,以上的路径要一致,即.gdbinit里的路径和实际check out的地址要一致。