小编Sir*_*uke的帖子

在GDB中处理以$开头的C++成员变量

我正在使用具有非常特殊编码风格的C++代码库,包括使用'$'在类中添加成员变量.对于之前从未遇到过这种情况的人来说,它不是C++标准的正式部分,而是潜伏在后向兼容性方面.

作为我正在谈论的一个例子:

#include <iostream>

class T { public: int $x; int y; };

int main()
{
  T *t = new T();
  t->$x = t->y = 42;
  std::cout << "t->$x = " << t->$x << std::endl;
  delete t;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这在GDB中引入了一个问题.GDB通常使用$前缀变量作为魔术便利变量(例如引用以前的值).启动GDB,在cout语句中设置断点,然后尝试打印t->$x.

p t运行正常. p *t运行正常. p t->y运行正常. p t->$x返回语法错误,大概是期望$引用一个方便变量.

理想情况下,我会完全剥离$ s并花费剩余的时间来追捕那些认为这是个好主意的人(特别是对于现代代码库).这是不现实的,但我仍然需要能够使用GDB进行调试.

我希望有一个神奇的逃脱角色,但我搜索或试过的任何东西都没有用.

例子:

  • p this->'\044descriptor'
  • p this->'$descriptor'
  • p this->'$'descriptor
  • p this->\$descriptor
  • p this->\\$descriptor
  • p this->'\$descriptor'
  • p this->'\\044descriptor'
  • p this->$$descriptor
  • p this->'$$descriptor'

等等. …

c++ debugging gcc gdb

10
推荐指数
1
解决办法
163
查看次数

标签 统计

c++ ×1

debugging ×1

gcc ×1

gdb ×1