gpt4 book ai didi

c++ - vs 用户模式调试器中的反引号是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:02 25 4
gpt4 key购买 nike

我使用 vs12 将以下 c++ 代码编译成 Program.exe

class foo
{
public:
foo()
{
std::cout << "in ctor\n";
}

~foo()
{
std::cout << "in dtor\n";
}

std::string s;
};

int main()
{
foo f{};
}

然后我转到“Tools->Launch Under Debugger...”并在调试器即时窗口中键入以下命令

x program!*foo*

这给了我以下输出

0:000> x program!*foo*
00007ff6`11ce4b00 Program!foo::~foo (void)
00007ff6`11ceaef0 Program!`foo::~foo'::`1'::dtor$0 (void)
00007ff6`11ce48f0 Program!foo::foo (void)
00007ff6`11ceae90 Program!`foo::foo'::`1'::dtor$0 (void)

我知道第一个输出是 foo 的析构函数,第三个是 foo 的构造函数。第二个和第四个(带反引号的)是什么?更一般地说,我可能会在用户模式调试器中看到反引号的其他地方是什么?

有趣的是,如果完成以下任一操作,反引号功能就会消失

  • 删除 std::cout 语句
  • 移除std::string s
  • 在构造函数和析构函数前加上throw()关键字

这似乎表明反引号函数与异常处理有关

最佳答案

这些是 Microsoft 编译器为“胶水”函数生成的内部名称,这些函数有助于将事物组合在一起,但不直接对应于源代码行。这是正常的。

在其他情况下,您会看到带有反引号的类似内部名称,例如使用 lambda 函数,或调用在另一个函数内的结构内声明的函数。

其他编译器有不同的方式来表示类似的无名代码块;该标准并未在此处规定任何特定行为,并且无论如何只能通过调试器观察到。

关于c++ - vs 用户模式调试器中的反引号是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26264712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com