【发布时间】:2013-12-02 08:58:00
【问题描述】:
我想在调试程序时通过 gdb 创建和模拟一些 STL 数据。
我在gdb中使用下面的命令来获取std::vector的一块内存,然后设置它的分配器,最后调用“push_back”函数填充一个整数。 但是,gdb 只是在调用 push_back 时向我显示了“尝试获取不在内存中的值的地址。”的消息。
请注意,我已经意识到“push_back”的参数是一个常量引用。因此,我在堆上“malloc”了一块内存来存储参数。
这是 gdb 调用:
(gdb) set $vect = ('std::vector<int, std::allocator<int>>'*) malloc (sizeof('std::vector<int, std::allocator<int>>'))
(gdb) set $alloc = ('std::allocator<int>'*)malloc(sizeof('std::allocator<int>'))
(gdb) set (std::allocator<int>)($vect->_M_impl) = *$alloc
(gdb) set $vect->_M_impl._M_start = 0
(gdb) set $vect->_M_impl._M_finish = 0
(gdb) set $vect->_M_impl._M_end_of_storage = 0
(gdb) p *$vect
$21 = {<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 = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}
(gdb) set $num = (int*)malloc(sizeof(int))
(gdb) set *$num = 5
(gdb) p *$num
$22 = 5
(gdb) call $vect->push_back(*$num)
Attempt to take address of value not located in memory.
gdb 版本是 7.6.1。
【问题讨论】: