GDB中打印map迭代器报错:找不到operator->的解决方法
解决GDB调试map迭代器时
operator->找不到的问题 在GDB 9.2版本中直接使用p map_it->first这类语法访问map迭代器成员时,会出现operator-> could not be found错误,但相同代码在编译运行时正常,这是因为该版本GDB对C++标准库迭代器的operator->支持存在局限。以下是几种解决办法:
改用
operator*解引用后访问成员
先通过*解引用迭代器,再直接访问pair的成员,GDB能正确识别这种语法:p (*map_it).first p (*map_it).second.startVal升级GDB版本
GDB 10及后续版本对C++标准库容器迭代器的支持更完善,升级后可直接使用map_it->first这类原生语法。在Ubuntu 20.04上可通过以下命令升级:sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install gdb执行
gdb --version确认版本是否更新成功。直接访问迭代器底层节点(依赖libstdc实现)
若暂时无法升级GDB,可手动访问GNU libstdc中map迭代器的底层_M_node成员,注意替换成你实际的键值类型:p ((std::pair<const 你的键类型, 你的值类型>*)map_it._M_node)->first p ((std::pair<const 你的键类型, 你的值类型>*)map_it._M_node)->second.startVal这种方法依赖于标准库的具体实现细节,不同版本可能有变动,仅作为临时替代方案。
内容的提问来源于stack exchange,提问作者W. Wang
相关产品推荐
相关产品推荐

