如果没有QDebug消息,Qt应用程序就会崩溃

Qt App Crashes If Ran Without a QDebug Message First

本文关键字:崩溃 应用程序 Qt QDebug 消息 如果没有      更新时间:2023-10-16

我每天都在做一个应用程序已经有一段时间了,好像已经有几个星期了,并且在开发方面已经取得了很大的进展。

我有一个不必要的类,它只是转发对象创建。它基本上是一个"Window"类创建了一个"Widget"类。因此,我没有通过不必要的"Window"类来创建"Widget"类,而是直接在主"App"类中创建了"Widget"类。但是现在如果我运行它,应用程序崩溃了,就像它在某种递归循环中一样,并且不显示窗口。

我在每行上添加了一些QDebug消息,以查看它在崩溃之前到达的位置,然后它运行得很好。这到底是怎么回事?它可以像这样运行:

void App::initialize()
{
    qDebug() << "Initializing...";
    qDebug() << "Creating the widget";
    widget = new Widget();
    qDebug() << "Showing the widget...";
    widget->show();
    qDebug() << "Initialized";
}

但是,如果我删除前两个QDebug消息中的任何一个,它就会卡在类似递归的循环中。我不知道它为什么会这样。我检查了项目文件和qmake,在调试和发布模式下运行,结果都是一样的。

我不是在寻找如何解决这个问题的答案。我想知道的是有没有人有过这样的经历。这对我来说毫无意义,我不知道它怎么可能崩溃……这是Qt的bug还是什么?

听起来好像您有内存管理问题——要么是没有正确初始化的东西,要么是践踏了其他人的内存(缓冲区溢出)。qDebug创建了一个相当重要的缓冲区——当被践踏时,它不会使程序崩溃,或者未初始化的值可以改变其默认值。

我将仔细检查您的初始化。特别要检查在构造函数中处理的事情,这些事情可能是通过从您删除的上一个类的初始化项传递的。

Foo::Foo(QObject *parent) : QObject(parent)