gpt4 book ai didi

c++ - GDB 调试器卡在 std::cout 上

转载 作者:太空宇宙 更新时间:2023-11-04 13:14:27 30 4
gpt4 key购买 nike

由于我的学习,我已经编写 C 和 C++ 代码一段时间了。我们曾经在学校的编码课上使用 Visual Studio 作为 IDE。

我现在正在尝试学习使用 GNU 编译器工具和调试器。我使用的是 CodeLite IDE 版本 9.1.8,带有 TDM-GCC-64 5.1.0 编译器。

我的具体问题是 GDB 调试器。我有点熟悉它的用法(Step into,Step over 等)。每次我尝试调试我自己的任何代码时,调试器都会在断点处停止并让我从那里继续。

然而,每次我用调试器点击“cout”时,它都拒绝进入下一行。当点击带有“cout”的某行时,我按“F10”转到下一行,但调试器不会从那里继续。它总是死机,不响应任何命令,我必须强制关闭调试器。所有其他可以想象的陈述都可以,但不是任何形式的“cout”。

熟悉CodeLite的人应该知道调试时文本编辑器窗口左边缘的绿色箭头。当箭头击中“cout”并且我按“F10”进入下一行时,箭头闪烁。当我再次按下“F10”时,箭头再次闪烁。在箭头从左侧边栏完全消失并且调试器卡在那里之前,可以这样做大约 3-4 次。

Starting debugger

Debugger hanging and arrow disappeared

这是一个示例代码。它是芬兰语的,所以您可能不明白我要打印的内容,但这并不重要。

“Henkilo”类包含两个私有(private)变量,string 代表名字,int 代表年龄。还有 <<运算符被重载,允许对象直接被cout打印出来。这段代码的赋值是为了演示复制构造函数的用法。

#include <iostream>
#include "Henkilo.h"


int main()
{
Henkilo henkilo1;

henkilo1.setName("Jaakko");
henkilo1.setAge(24);

Henkilo henkilo2(henkilo1);

std::cout << "\nLuotiin henkil\2241, jonka tiedot ovat: " << std::endl << henkilo1 << std::endl;
std::cout << "Kopioitiin henkil\2241 objektiin henkil\2242. Henkil\224n 2 tiedot ovat: " << henkilo2 << std::endl;
return 0;
}

请原谅我发帖时可能犯的任何错误,这是我第一次发帖。

编辑:

@肯尼奥斯特罗姆

是的,现在我已经测试过了,我可以进入该功能。它似乎也卡在那里。

std::ostream& operator<< (std::ostream& os, const Henkilo& obj) 
os << "\nNimi : " << obj.name<< std::endl << "Ik\204 : " << obj.age << std::endl;
return os;
}

它似乎卡在您将字符串文字插入“os”对象的那一行。

编辑:

@保罗麦肯齐

抱歉,根本没有考虑到这一点。这是类的实现。这是人的基本类,包含姓名和年龄字段。

亨基洛.h

#include <string>
#include <iostream>

class Henkilo
{
private:
std::string name;
int age;
public:
Henkilo();
Henkilo(std::string initName, int initAge);
Henkilo(const Henkilo& henkilo);
void setName(std::string newName);
std::string getName();
void setAge(int newAge);
int getAge();
friend std::ostream& operator<< (std::ostream& os, const Henkilo& obj);
~Henkilo();

};

亨基洛.cpp

#include "Henkilo.h"

Henkilo::Henkilo() : name(""), age(0) {};
Henkilo::Henkilo(std::string initName, int initAge) : name(initName), age(initAge) {};
Henkilo::Henkilo(const Henkilo& henkilo) : name(henkilo.name), age(henkilo.age) {};

void Henkilo::setName(std::string newName) { name = newName; };
std::string Henkilo::getName() { return name; };
void Henkilo::setAge(int newAge) { age = newAge; };
int Henkilo::getAge() { return age; };

std::ostream& operator<< (std::ostream& os, const Henkilo& obj)
{
os << "\nNimi : " << obj.name<< std::endl << "Ik\204 : " << obj.age << std::endl;
return os;
}
Henkilo::~Henkilo() {};

最佳答案

看起来您的 outputstream 运算符重载没有返回任何内容。第一行之后有返回语句,后面什么也没有。试试这个:

std::ostream& operator<< (std::ostream& os, const Henkilo& obj) {
os << "\nNimi : " << obj.name<< std::endl << "Ik\204 : " << obj.age << std::endl;
return os;
}

关于c++ - GDB 调试器卡在 std::cout 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38063462/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com