#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 问题还是预期的问题?对给定代码的任何更改(例如,删除任何其他变量)都会消除该问题。
除非我弄错了,否则断点会在其所在行之前停止执行。因此,您尝试读取未初始化的字符串,并且出现错误是预料之中的。如果您要向前执行(或在一行后放置断点),我怀疑您不会遇到此错误。