c++ - 为什么从析构函数调用时 qCritical 或 qDebug 不起作用?

标签 c++ debugging qt qt-creator destructor

我有一个多线程应用程序,我最初是使用 Qt 4.6 和 Qt Creator 2.2(或可能是 2.1)开发的,最近我升级到 Qt 4.7 和 Qt Creator 2.3(这都是在 Windows 中)。我之前一直在通过调用 qCritical() 来测试应用程序中各种线程和对象的销毁顺序。在析构函数中。它很容易确认东西正在按照我预期的顺序销毁。

但是,在升级到较新版本后,我注意到消息并不总是显示在 Qt Creator 的“应用程序输出”面板中。消息的顺序总是正确的,但在某个随机点,输出只是停止显示。有时根本不显示任何输出。尽管如此,我可以确认对象正在被销毁并且我的应用程序退出时没有错误。

使用qDebug() 问题依旧来显示消息,但如果我改为使用简单的 printf(),一切都会正常显示。在应用程序完成清理之前应用程序输出停止的原因可能是什么?最新版本的 Qt 或 Qt Creator 是否有更改,这些更改会改变这些函数在从析构函数内部调用时的行为方式?

最佳答案

因为 qDebug 与 QApplication 交互,而且,现在它的某些部分可能会先于应用程序的所有其他部分被销毁。也许。 但是,请尝试手动销毁您的对象,然后才调用 QApplication::exit();

关于c++ - 为什么从析构函数调用时 qCritical 或 qDebug 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140694/

相关文章:

c++ - 如何编译依赖于 C++ 目标文件的 CUDA 共享库?

c++ - CRTP -- 访问不完整的类型成员

java - 如何写入 Netbeans 调试器控制台(使用 Java)?

javascript - 有哪些调试 javascript 的好技巧?

c++ - 不能足够快地分配内存?

c++ - 了解函数循环中发生的事情

Android设备USB调试

c++ - 不同类别的 2 个对象之间的信号/插槽

android - 如何在 Qt/QML for android 中创建网页缩略图

database - qt中如何加载ODBC