c++ - 如果在没有 QDebug 消息的情况下运行,Qt 应用程序会崩溃

标签 c++ qt debugging crash

一段时间以来,我每天都在开发一个应用程序,现在已经有几周了,并且在开发方面取得了很大进展。

我有一个不必要的类,它只是转发一个对象创建。它基本上是一个创建“Widget”类的“Window”类。因此,我没有通过那个不必要的“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,在调试和 Release模式下都运行了,而且都是一样的。

我不是在寻找如何解决这个问题的答案。我正在寻找的是是否有其他人经历过这种情况。这对我来说毫无意义,我不明白它怎么可能崩溃...这像是 Qt 中的错误还是什么?

最佳答案

听起来您遇到了内存管理问题 - 要么未正确初始化,要么占用了其他人的内存(缓冲区溢出)。 qDebug 创建了一个相当大的缓冲区——踩踏它不会使您的程序崩溃,或者对于未初始化的值可以更改其默认值。

我会仔细检查你的初始化。尤其要检查在您的构造函数中处理的事情,这些事情可能已经通过您删除的上一个类的初始化程序传递。

例如

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

关于c++ - 如果在没有 QDebug 消息的情况下运行,Qt 应用程序会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24500991/

相关文章:

debugging - 如何调试magento应用程序

android - gradle 重复条目 FloatProperty

c++ - 指向基类的指针和指向派生对象的指针的内存布局差异

字符串流istringstream的C++问题

c++ - QVector::remove(int i, int count) 从第一个移除时的性能

c++ - QWebView 中的内存泄漏

c++ - initializer_list<T> 对 T 的赋值运算符要求

c++ - 单引号(撇号)围绕字母打印到屏幕 C++

c++ - Phonon 不渲染视频

javascript - 有没有办法在不设置断点的情况下记录 JavaScript 堆栈跟踪?