vs用户模式调试器中的反勾符号是什么 < >我用VS12将以下C++代码编译成代码>程序.exe < /代码> class foo { public: foo() { std::cout << "in ctor\n"; } ~foo() { std::cout << "in dtor\n"; } std::string s; }; int main() { foo f{}; }
这给了我以下输出vs用户模式调试器中的反勾符号是什么 < >我用VS12将以下C++代码编译成代码>程序.exe < /代码> class foo { public: foo() { std::cout << "in ctor\n"; } ~foo() { std::cout << "in dtor\n"; } std::string s; }; int main() { foo f{}; },c++,visual-studio,debugging,C++,Visual Studio,Debugging,这给了我以下输出 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的析
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
的构造函数。第二个和第四个是什么(有背记号的)?。更一般地说,在用户模式调试器中,我还可能在哪些地方看到反勾号
有趣的是,如果执行以下任一操作,backtick函数就会消失
- 删除
语句std::cout
- 删除
std::字符串s
- 在构造函数和析构函数前面添加
关键字throw()
这似乎表明backtick函数与异常处理有关这些是由Microsoft编译器为“粘合”函数生成的内部名称,有助于将内容整合在一起,但并不直接对应于一行源代码。这是正常的 在其他情况下,您会看到类似的内部名称带有反勾号,例如使用lambda函数,或者调用在另一个函数中的结构中声明的函数
其他编译器有不同的方法来表示相似的无名代码块;该标准并不规定任何特定的行为,它只能通过调试器来观察。< /P>可能是因为它没有在C++中使用,所以选择了后台,所以它不能被任何来自C++源代码的结构所混淆。当然,有许多符号可供选择,以适合该配置文件。事实上,<代码> dor $ 0 < /COD>只是使用了
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)