var-create无法创建变量对象

moh*_*med 0 c++ debugging clion

当我调试c ++(在clion中)

我不能看" 全局字符串 ",我试图检查另一种类型,但它运作良好.

另外,我尝试了本地字符串,我也可以看一下?!

这是该程序的屏幕截图

Eld*_*mov 5

以防万一,该问题现在被追踪为CPP-8693.

根本原因与libstdc ++ dual ABI有某种关联.std::string类型的全局符号被不同地修改,这反过来混淆了GDB.

在GCC 5.1版本的libstdc ++引入了一个新的库ABI,其包括新的实现方式std::stringstd::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)