var-create无法创建变量对象

时间:2017-01-25 15:02:47

标签: c++ debugging clion

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

我看不到“全局字符串” ,我试着检查另一种类型,但效果很好。

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

this is screen shot of the program

1 个答案:

答案 0 :(得分: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";

这是相关的nm输出:

0000000000602240 B _Z10global_varB5cxx11
0000000000602280 b _ZL10static_var

可能的解决方法是禁用C ++ 11 ABI。在CMakeLists.txt中,在set(CMAKE_CXX_STANDARD 11)行之后添加以下行(如果有):

add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)

这会使符号名称受到不同的破坏,GDB再次感到高兴:

0000000000602238 B global_var
0000000000602248 b _ZL10static_var