Qt应用程序崩溃如果没有QDebug消息首先

时间:2014-07-01 00:45:28

标签: c++ qt debugging crash

我每天都在处理一个应用程序已经有一段时间了,就像几周一样,并且已经有了很长的发展。

我有一个不必要的类,只是转发对象创建。它基本上是一个“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中的一个错误还是什么?

1 个答案:

答案 0 :(得分:1)

听起来你有一个内存管理问题 - 要么没有正确初始化,要么踩到别人的内存(缓冲区溢出)。 qDebug创建了一个相当重要的缓冲区 - 当它被踩到时不会使你的程序崩溃,或者对于未初始化的值,可以改变它们的默认值。

我会仔细检查你的初始化。特别是检查构造函数中处理的内容,这些内容可能是使用您删除的上一个类中的初始化程序传递的。

e.g。

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