读取 std::string 变量时出现 GDB 错误

问题描述 投票:0回答:1
#include <string>

struct S
{ 
  S(const std::string& es)
    : first_string(func().c_str())
  {}

  std::string func()
  {
    std::string my_string = "some string"; // Breakpoint here
    return my_string;
  }

  std::string first_string;
  std::string second_string;
};

int main()
{
  std::string foo;
  S s("mystring");
}

如果我在

my_string
的初始化处放置一个断点,并尝试打印
my_string
info locals
的值,则会收到以下错误:

my_string = <error reading variable: Cannot create a lazy string with address 0x0, and a non-zero length.>

使用 gdb 8.2-20 进行测试。这是 gdb 问题还是预期的问题?对给定代码的任何更改(例如,删除任何其他变量)都会消除该问题。

c++ debugging gdb
1个回答
0
投票

除非我弄错了,否则断点会在其所在行之前停止执行。因此,您尝试读取未初始化的字符串,并且出现错误是预料之中的。如果您要向前执行(或在一行后放置断点),我怀疑您不会遇到此错误。

© www.soinside.com 2019 - 2024. All rights reserved.