C++ 显示字符串变量"<不完整类型>的调试窗口



据我所知,我正在以相当正常的方式初始化字符串,当我调试时,我的IDE(CLion)中的变量窗口将其值显示为<incomplete type>。 我有一些简单的代码导致字符串变量Bob的问题。

#include <iostream>
int main() {
    std::string Bob = "this doesn't show up in the variables window";
    std::cout << Bob << std::endl;
    return 0;
}

我不知道它有什么影响,但我会包括 CMakeLists 文件,它似乎是我可以使用的最简单的文件。

cmake_minimum_required(VERSION 3.8)
project(testing123)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11"}
set(SOURCE_FILES main.cpp)
add_executable(testing123 ${SOURCE_FILES})
set(CMAKE_CXX_COMPILER "/cygdrive/c/cygwin64/bin/clang++")
set(CMAKE_C_COMPILER "/cygdrive/c/cygwin64/bin/clang++")
我看

了其他问题,它们都与类和指针有关,我看不出它们有直接关系,所以如果他们应该为此负责,我将不胜感激解释。

您可能需要使用_GLIBCXX_DEBUG宏设置调试模式。

您可以使用以下行在 CMakeLists.txt 文件中执行此操作:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG")

使用带有调试符号的标准库

在 Linux 上,比用 _GLIBCXX_DEBUG 重新编译整个源代码的侵入性更小的方法是定义

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6

用于调试器或 IDE。您可能需要通过以下方式安装

sudo apt install libstdc++6-8-dbg

第一。在 Ubuntu 上,我通过 Snap 获得 CLion,然后我用包含以下内容的文件替换了 /snap/bin/clion 处的符号链接

#!/bin/bash
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6 /usr/bin/snap run clion "$@"

现在我可以看到字符串的内容,至少在 LLDB 中(我没有尝试 GDB)。

对于 GDB,无需任何准备的非常快速的解决方法是将字符串转换为 char*

(gdb) p (char*) my_string
$13 = 0x2058970 "These are the contents"

这也适用于开箱即用的 CLion。

相关内容

最新更新