【问题标题】:How to see actual value of a C++ string in CLion's debugger?如何在 CLion 的调试器中查看 C++ 字符串的实际值?
【发布时间】:2017-06-28 21:32:13
【问题描述】:

我在 Linux 上使用 CLion,但在调试时遇到了困难。我评估了一个最终成为字符串的表达式,但调试器无法向我展示返回值是什么,除了它是一个字符串。如何查看实际值? (另请注意,它甚至不显示 char 值的值)

【问题讨论】:

  • 请检查Settings -> Build, Execution, Deployment -> Debugger中的Enable GNU C++ Value Renderers选项是否打开。
  • @EldarAbusalimov 我已经启用了,但我得到的只是随机的十六进制值,而不是真正的值。
  • @ismailsunni 你能检查一下youtrack.jetbrains.com/issue/CPP-6828 (add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)) 中建议的解决方法吗?有帮助吗?
  • 我知道老问题,但请在这里参考issue

标签: c++ debugging clion watch


【解决方案1】:

LLDB 有这个问题:https://youtrack.jetbrains.com/issue/CPP-13701

GDB 很好,所以你可以切换到 GDB 来避免这种情况。

不过2021年,如果非要使用LLDB,可以使用变量std::string mystr;的内存地址

  • 在 LLDB 控制台中:p *(char**) &mystr
  • 或者,在 CLion-2021 调试器中观看:*(char**) &mystr

【讨论】:

    【解决方案2】:

    只需为所需的std::string 表达式添加监视并编辑监视以附加.c_str()F2 可以正常工作)。

    例如要检查 my_cpp_str 变量,请添加以下手表:

    my_cpp_str.c_str()

    【讨论】:

      【解决方案3】:

      使用 gdb,您可以通过以下 2 种方法打印 std::string。

      1. p mystr.c_str() - 这可用于打印 std::string 类型的值。
      2. p *(char**) 0x7f8fbb7a9c20 - 这适用于 std::string 类型的内存。

      【讨论】:

      • 现在是 2020 年,这就是我们必须在调试器中打印 std::string 值的方式:p *(char**) 0x7f8fbb7a9c20...
      猜你喜欢
      • 1970-01-01
      • 2015-09-19
      • 2013-08-31
      • 2019-06-11
      • 2017-11-23
      • 2022-07-19
      • 1970-01-01
      • 2010-12-27
      • 2011-02-21
      相关资源
      最近更新 更多