2017-01-25 1 views
-1

Wenn i c debuggen ++ (in Clion)

Ich kann nicht sehen "globalen Strings" , habe ich versucht, einen anderen Typen zu überprüfen, aber es hat gut funktioniert.

var erstellen derzeit keine variable Objekt erstellen

Auch versuchte ich lokalen String und ich kann es auch beobachtet werden ?!

this is screen shot of the program

+3

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). –

+0

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. –

+0

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

Antwort

2

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