ich folgender C++ Code in Program.exe
mit VS12was die Graviszeichen Symbole in vs Benutzermodus-Debugger sind
class foo
{
public:
foo()
{
std::cout << "in ctor\n";
}
~foo()
{
std::cout << "in dtor\n";
}
std::string s;
};
int main()
{
foo f{};
}
Dann gehe ich zusammengestellt haben „Tools->Launch Under Debugger...“ und den folgenden Befehl in dem sofortigen Fenster Debugger Typen
x program!*foo*
das gibt mir die folgende Ausgabe
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)
Ich verstehe die erste Ausgabe ist foo
's Destruktor und die dritte ist foo
' s Konstruktor. Was sind die zweiten und vierten (die mit den Backticks)? Allgemeiner, was sind die anderen Orte, wo ich Backticks im Debugger des Benutzermodus sehen könnte?
Interessanterweise gehen die Graviszeichen Funktionen entfernt, wenn eine der folgenden
getan- entfernen
std::cout
Aussagen - entfernen
std::string s
- Fügen Sie den
throw()
Schlüsselwort vor dem Konstruktor und Destruktor
Dies scheint darauf hinzudeuten, dass die Backtick-Funktionen etwas mit der Ausnahmebehandlung zu tun haben
Vermutlich wurde der Backtick ausgewählt, weil er nicht in C++ verwendet wird, daher kann er nicht für irgendein Konstrukt aus C++ - Quellcode verwechselt werden. –
Definitiv. Natürlich gibt es viele Symbole zur Auswahl, die zu diesem Profil passen. In der Tat verwendet "dtor $ 0" das '$', nur weil es außerhalb des Bereichs der zulässigen Zeichen liegt. – StilesCrisis
Außer dass eine Reihe von C und C++ - Compiler '$' in Bezeichnern als Erweiterung zulassen. –