免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6272 | 回复: 3
打印 上一主题 下一主题

[C++] gdb调试c++的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-28 22:59 |只看该作者 |倒序浏览
怎么把vector里面元素的值给显示出来?

vector<XXX> list;

(gdb)p list
$1={ 一大堆东西几乎看不懂}
(gdb)p list.at(1).xxx
也不行,说at()是内联的,无法调用。。

求助高手。。。。

论坛徽章:
0
2 [报告]
发表于 2006-12-29 11:47 |只看该作者
沉下去了,自己顶一下。。。

论坛徽章:
0
3 [报告]
发表于 2006-12-30 12:27 |只看该作者
GDB 在调用成员函数的时候需要首先找到函数的代码才能执行。如果一个成员函数是内联的、并且没有在程序中被使用,那么 GDB 将找不到其代码,也就不能执行此成员函数。

对于这个问题,有以下两种解决方法:
  • 在源程序的查看之前的位置使用一次  at() 成员函数。
  • 执行 print list 可以列出 vector 的内部数据结构,使用这些结构也可以查看各个元素。假设列出了如下内容:
    $1 = {<std::_Vector_base<int,std::allocator<int> >> = {
        _M_impl = {<std::allocator<int>> = {<__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, _M_start = 0x8095040,
          _M_finish = 0x809505c, _M_end_of_storage = 0x8095060}}, <No data fields>}

    可以这样查看第一个元素:print list._M_impl._M_start[0]

    为方便使用,可以定义一个宏来使用:
    define print_vector
    print $arg0._M_impl._M_start[$arg1]
    end

    这样,print_vector list 2 就可查看第三个元素。

论坛徽章:
0
4 [报告]
发表于 2007-01-29 16:53 |只看该作者
直接使用:
  p v[0]
也可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP