How to debug C++ STL vector
用GDB 调试C++代码的时候,如果遇到STL vector,map 或者list的时候,想要print 数据的时候发现GDB会打出一堆信息,但是其实对于程序来说关心的只是其中的element数据是什么,那如何只输出我们想要的结果呢?
版本比较低的GDB,比如低于GDB7.0, 其实用以下print命令是可以只打印出element的内容。
print *(Vector._M_impl._M_start)@Vector.size()
gdb 7.0之后,可以使用gcc提供的python脚本,来改善显示结果,所以一般用比较高的版本 是可以得到期望的结果的。
(gdb) p II
$1 = std::vector of length 3, capacity 4 = {10, 20, 30}
但是还是搜索了一下网上,发现官方提供了STL support工具。
Download stl-views-1.0.3.gdb
在这个文里定义了很多绪如:pvector, pmap, pstring之类的GDB函数供我们使用
将这个文件下载到自己的HOME目录,rename it to .gdbinit,这样每次启动gdb的时候就会自动加载这个文件。
然后我们就可以直接使用pvector, pmap, 和plist来查看