无法访问STL C++;带有GDB的容器值 我调试C++代码,在访问STD::列表时遇到问题。 问题是我无法获取与头节点关联的地址($3指列表):

无法访问STL C++;带有GDB的容器值 我调试C++代码,在访问STD::列表时遇到问题。 问题是我无法获取与头节点关联的地址($3指列表):,c++,stl,gdb,C++,Stl,Gdb,尝试获取头节点地址时,我收到以下错误消息: (gdb)p&($3._M_impl._M_node) 尝试获取不在内存中的值的地址 我也尝试过从互联网上获得STL扩展,但同样失败了 set $head = &$arg0._M_impl._M_node 我已经看过谷歌了,这是我能找到的关于这个问题的全部信息: 但这并不能解决我的问题。任何建议都是非常受欢迎的 提前感谢好吧,这个列表显然是空的。如果这是列表的全部内容,我可以想象它的整个值都保存在registered中,例如,当它被传递时(

尝试获取头节点地址时,我收到以下错误消息:

(gdb)p&($3._M_impl._M_node)

尝试获取不在内存中的值的地址

我也尝试过从互联网上获得STL扩展,但同样失败了

set $head = &$arg0._M_impl._M_node
我已经看过谷歌了,这是我能找到的关于这个问题的全部信息:

但这并不能解决我的问题。任何建议都是非常受欢迎的


提前感谢

好吧,这个列表显然是空的。如果这是列表的全部内容,我可以想象它的整个值都保存在registered中,例如,当它被传递时(返回或作为参数传递)。你是对的,我没有意识到列表是空的。但是即使列表是空的,头部节点也应该在那里,我应该能够得到它的地址。我尝试了一个小例子,包括创建一个列表和添加一些元素。然后我定义了两个断点:一个在添加元素之后,另一个在清除列表之后。在这两种情况下,我都可以得到头节点地址。就我个人而言,我希望传递给另一个函数的空列表实际上不一定“在那里”!我希望它只是一些寄存器中的几个指针,暂时无法进入内存……如果您使用任何级别的优化编译代码,那么空列表的指针位于寄存器中,我不会感到惊讶。尝试编译而不进行优化,看看gdb是否报告了内容。嗨,比尔。代码是使用以下选项编译的:-O0-g。我不知道是否还需要启用/禁用更多标志。谢谢。这个单子显然是空的。如果这是列表的全部内容,我可以想象它的整个值都保存在registered中,例如,当它被传递时(返回或作为参数传递)。你是对的,我没有意识到列表是空的。但是即使列表是空的,头部节点也应该在那里,我应该能够得到它的地址。我尝试了一个小例子,包括创建一个列表和添加一些元素。然后我定义了两个断点:一个在添加元素之后,另一个在清除列表之后。在这两种情况下,我都可以得到头节点地址。就我个人而言,我希望传递给另一个函数的空列表实际上不一定“在那里”!我希望它只是一些寄存器中的几个指针,暂时无法进入内存……如果您使用任何级别的优化编译代码,那么空列表的指针位于寄存器中,我不会感到惊讶。尝试编译而不进行优化,看看gdb是否报告了内容。嗨,比尔。代码是使用以下选项编译的:-O0-g。我不知道是否还需要启用/禁用更多标志。谢谢
set $head = &$arg0._M_impl._M_node