GDB 以可读格式打印变量(使用 << 运算符)

GDB print variable in readable format (using << operator)

GDB 是一个很好的工具,但就我目前使用它的方式而言,一旦处理更复杂的数据结构,它就会变得毫无用处,因为只需对它们使用 print 就可以了整个屏幕都有关于 class.

的不可读细节

然而,我通常为我的 class 定义一个自定义 operator<<,目的是为我的 class.[=16 创建一个(或多或少)可读的字符串表示形式=]

因此,如果 GDB 始终使用它(如果可用)而不是其默认打印行为,我会更喜欢。

我找到了 2010 年的 this question,它描述了如何手动调用 operator<<。除了做起来有点乏味之外,我还没有让这些对我有用(我总是得到 No symbol "operator<<" in current context.)。

然而,在我看来,似乎必须有一种更方便的方法让 GDB 以可读格式打印变量。毕竟我不是第一个遇到这种情况的人。

因此我的问题是:如何让 GDB 以可读格式打印变量(最好使用在相应类型中实现的 operator<<)? 我发现的链接问题是从 2010 年开始的,所以我希望从那以后情况有所改善。

it appears to me as if there must be a more convenient way of getting GDB to print variables in a readable format.

是的:你为他们实现了一个 python 漂亮的打印机。 Documentation.

I would like to avoid having to rewrite a pretty-printer for all my classes when I already have done that in code.

call PrintMyClass() 解决方案的问题在于它们 需要 一个运行 过程。当你有一个 core 转储时,你不能在你的代码中调用任何函数,所以你需要在你的程序 之外 一些东西来漂亮地打印数据。

如果您从不调试 core 转储,显然不是问题,但迟早您可能不得不这样做,然后无论如何您都需要复制代码。