Gdb 使用笔记

2013-12-19 18:52:00 +0000

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的地址要一致。