Nur für den Fall, ist das Problem jetzt als CPP-8693 verfolgt.
Die Ursache ist irgendwie auf libstdC++ dual ABI bezogen. Globale Symbole von std::string
Typen werden anders gemangelt, was wiederum GDB verwirrt.
Im GCC 5.1 Release libstdC++ eingeführt, um eine neue Bibliothek ABI, die neuen Implementierungen von std::string
und std::list
enthält. Diese Änderungen waren notwendig, um dem 2011 C++ - Standard zu entsprechen, der Copy-On-Write-Strings verbietet und Listen benötigt, um ihre Größe zu verfolgen.
den folgenden Code Gegeben:
std::string global_var = "Hi there!";
static std::string static_var = "Hello";
Hier ist der Zusammenhang nm
Ausgabe:
0000000000602240 B _Z10global_varB5cxx11
0000000000602280 b _ZL10static_var
Eine mögliche Abhilfe C++ 11 ABI deaktivieren ist. In CMakeLists.txt, fügen Sie die folgende Zeile ein, direkt nach der set(CMAKE_CXX_STANDARD 11)
Zeile, falls vorhanden:
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
Diese Symbolnamen machen anders verstümmelt werden, in einer Art und Weise ist GDB wieder glücklich:
0000000000602238 B global_var
0000000000602248 b _ZL10static_var
Don Links zu Bildern von Text nicht veröffentlichen. Kopieren Sie den eigentlichen Text als Text in den Fragetext. Bitte [lesen Sie, wie Sie gute Fragen stellen können] (http://stackoverflow.com/help/how-to-ask) und erfahren Sie, wie Sie ein [minimales, vollständiges und verifizierbares Beispiel] erstellen können (http: // stackoverflow. com/hilfe/mcve). –
Welche Version von Clion verwenden Sie für Ihr Problem? Ich erinnere mich, dass es in der Debugger-Ansicht in früheren Versionen einige Probleme mit 'std :: string' gab, aber das wurde schon seit einiger Zeit behoben. –
nicht const 'char *' zu String-Literalen sind veraltet (um zu verhindern, dass Sie versuchen, das String-Literal zu ändern), versuchen Sie 'const char * f =" RBYG ";' – George