我想在调试程序时通过gdb创建和模拟一些STL数据。
我在 gdb 中使用了以下命令来访问std :: vector的内存块,然后设置其分配器,最后调用“push_back”函数填写一个int号。 但是,gdb只是在调用push_back时向我显示了“尝试获取不在内存中的值的地址。”的消息。
请注意,我已经意识到“push_back”的参数是一个const引用。因此,我“ 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。
答案 0 :(得分:0)
这只是gdb表达式求值程序中的一个错误。它位于某个地方的gdb bugzilla中(我认为最初使用std::string
报告了一些测试用例)。