使用 GDB 的 Python 漂亮打印不支持地图的索引运算符 []

Python pretty printing with GDB does not support map's indexing operator []

本文关键字:索引 运算符 地图 打印 GDB Python 漂亮 使用 不支持      更新时间:2023-10-16

我在使用 GDB 检查 std::map 类型变量时遇到麻烦。在 GDB 中,我通常使用 libstd-c++ 存储库 (https://sourceware.org/gdb/wiki/STLSupport) 中的漂亮打印机来打印 STL 容器中的项目。漂亮的打印机可以很好地处理像vector这样的简单容器,但它似乎并不完全支持map。

要在 map 中查找具有给定键的项目,我尝试使用 operator[],但 GDB 报告了以下错误消息"找不到运算符 []"。

是因为漂亮的打印机缺乏对地图的支持吗? 还是我错过了什么?

谢谢

漂亮的

打印机只是一个显示功能。 它们不会影响评估。 正如您所发现的,这有时会令人困惑。

在您的情况下,gdb 正在尝试调用正确的operator[]。 但是,您的编译器已经对其进行了优化 - 这在C++程序中很常见。

一种选择可能是使用 -fkeep-inline-functions 进行编译。 这将导致发出出行外副本。 但是,这并不总是可取的。

另一种方法可能是使用 gdb 相对较新的 xmethod 功能(请参阅相关手册页)来编写自己的功能。 一些 libstdc++ 的 xmethods已经进入了 GCC 树,所以你的答案可能就像升级 GCC 一样简单。