【发布时间】:2013-02-01 09:35:12
【问题描述】:
在搜索了 qDebug() 语句在 Qt 的标准消息处理程序中正常工作但在切换到我自己的消息处理程序时失败的原因后,我在这里呼吁看看是否有其他人对此问题有任何经验。
我知道/尝试过的事情,但无济于事......
1) CONFIG += console
2) DEFINES -= QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
3)::fprintf(stderr, "ERROR\n"); ::fflush(stderr);
4) ::fprintf(stdout, "OUTPUT\n"); ::fflush(stdout);
5)std::cerr << "CERROR" << std::endl; std::cerr.flush();
但是在使用内置处理程序时它可以正常工作(即,它将消息打印到 QtCreator 控制台)
int main(int argc, char *argv[]) {
// Use my handler
qInstallMessageHandler(MyCustomLogger);
qDebug() << "Not Printed";
// Use standard handler
qInstallMessageHandler(0);
qDebug() << "Correctly Printed";
// Use my handler again
qInstallMessageHandler(MyCustomLogger);
qDebug() << "Not Printed Again...";
}
最近的测试是使用 WinAPI 命令为自己分配一个控制台,这会导致正确的行为,所有输出到 stderr 和 stdout 在我创建的控制台上都是可见的。但是,这不是我想要的行为,我希望能够在 QtCreator 中查看此输出。
关于标准消息处理程序如何打印到调试器的任何想法? 我还没有在 Qt 源代码中找到它。
【问题讨论】:
-
在 windows 上,qDebug() 使用调试通道,而不是 stderr。
-
我必须承认我以前从未听说过调试通道,请转至 google。
标签: c++ qt console qt-creator stderr