Chinaunix
标题:
gdb调试c++的问题
[打印本页]
作者:
rushrush
时间:
2006-12-28 22:59
标题:
gdb调试c++的问题
怎么把vector里面元素的值给显示出来?
vector<XXX> list;
(gdb)p list
$1={ 一大堆东西几乎看不懂}
(gdb)p list.at(1).xxx
也不行,说at()是内联的,无法调用。。
求助高手。。。。
作者:
rushrush
时间:
2006-12-29 11:47
沉下去了,自己顶一下。。。
作者:
whyglinux
时间:
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 就可查看第三个元素。
作者:
redac
时间:
2007-01-29 16:53
直接使用:
p v[0]
也可以
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2