moh*_*med 0 c++ debugging clion
我不能看" 全局字符串 ",我试图检查另一种类型,但它运作良好.
另外,我尝试了本地字符串,我也可以看一下?!

以防万一,该问题现在被追踪为CPP-8693.
根本原因与libstdc ++ dual ABI有某种关联.std::string类型的全局符号被不同地修改,这反过来混淆了GDB.
在GCC 5.1版本的libstdc ++引入了一个新的库ABI,其包括新的实现方式
std::string和std::list.这些更改对于符合2011 C++标准是必要的,该标准禁止写入时写入字符串并要求列表跟踪其大小.
给出以下代码:
std::string global_var = "Hi there!";
static std::string static_var = "Hello";
Run Code Online (Sandbox Code Playgroud)
这是相关的nm输出:
0000000000602240 B _Z10global_varB5cxx11
0000000000602280 b _ZL10static_var
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方法是禁用C++ 11 ABI.在CMakeLists.txt中,在行后面添加以下set(CMAKE_CXX_STANDARD 11)行(如果有):
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
Run Code Online (Sandbox Code Playgroud)
这使得符号名称被不同地修改,以某种方式GDB再次开心:
0000000000602238 B global_var
0000000000602248 b _ZL10static_var
Run Code Online (Sandbox Code Playgroud)