用gdb 调试如下代码时:
map<int, int> m;
m[1] = 2;
m[3] = 3;
(gdb) p m[1]
Attempt to take address of value not located in memory.
(gdb) m.find(1) 或者 m.size()
Cannot evaluate funtion -- may be inlined
调用size 或find 出错是因为代码中没有调用size, find方法, 模板方法只有在程序中调用以后才能在gdb中调用。
gdb 对没有对stl的支持,print m 以后得不到什么有用的信息。
解决以上问题我目前发现了两种方法:
1: 定义gdb 宏
http://sourceware.org/ml/gdb/2008-02/msg00064/stl-views.gdb
把上面文件内容粘贴到.gdbinit或者在.gdbinit中包含该文件, 就可以用定义的命令调试stl 了。
该方法优点: 使用较为简单
缺点:该宏只能支持c++内置基本类型,对于复杂类型没有支持; 与stl版本有关, 有可能出现语法错误;
2: 程序中编写测试代码
void test(.....) {