gdb调试stl
来源:互联网 发布:御马脚垫 知乎 编辑:程序博客网 时间:2024/05/20 12:24
用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(.....) {
cout << .....
}
然后在gdb 中 print test(..) 或者 call test(...)
就可以显示stl内容了。
优点: 调试功能比较全面, 可以调试任意复杂类型
缺点: 编写测试代码较为麻烦 ; 对core-dump无法使用
另外网上提供了一些python 和perl的工具也可以扩展gdb对stl的支持。
调试iterators时, 如果类型是基本类型, 可以用print *(iter._M_current) 观察迭代器指向内容
- GDB调试STL容器
- gdb 调试stl
- gdb调试C++ STL
- gdb调试stl相关
- gdb调试stl
- gdb中调试stl
- gdb调试stl
- GDB 调试 STL
- 使用GDB 调试STL方法
- gdb调试-查看STL容器
- GDB调试STL复杂容器
- 配置GDB支持STL调试
- 使用GDB调试STL容器
- GDB 调试子进程 及STL
- gdb调试c++的STL容器
- gdb调试,查看stl容器信息,string,vector等
- 在GDB中调试使用了STL的C++程序
- 在eclipse用gdb调试stl容器配置
- 如何实现科技论文里面的算法
- 黑马程序员-iOS基础-Objective-C基础(三)
- SQL Server2008无法连接到XX,在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
- iOS 之OC字符串
- 使用Drawable资源之使用LayerDrawable资源
- gdb调试stl
- Spring中数据源和数据库连接池配置的几种方法
- MP4V2 录制mp4(h264+aac) 接口介绍
- 关于定制的viewpagerindicator,实现特殊效果
- 学习Unity3D之Unity基本操作。
- jQueryEasyUI Messager基本使用
- iOS 之Core Data持久化存储
- MySql按周,按月,按日分组统计数据
- 逻辑表达式化为真值表