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

时间:2011-11-15 17:41:07

标签: 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的最新版本是否有变化,这些变化会改变这些函数在析构函数内部调用时的行为方式?

1 个答案:

答案 0 :(得分:0)

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