qt 调试语句的处理 禁用和重定向到文件

在qt调试中,qdebug是个非常方便的功能,只需要在包含#include<QDebug> ,你便可以在代码中随时随地使用打印调试语句了,并且可以选择对应的调试等级。

这些函数按照调试的等级以此有,其中qFatal执行后程序直接退出,并用对话框提示相关错误:

qDebug /
qWarning /
qCritical
qFatal

这些函数的使用用法如下:


#include<QDebug>

int main(int argc, char *argv[])

{

    qDebug()<<"hello qDebug";

    qWarning()<<"hello qWarning";

    qCritical()<<"hello qCritical";

//    qFatal()   <<"hello qFatal"; //can use like this

    qFatal("hello qFatal"); // will exit the program

}

但是当程序完成的时候,就需要根据需求关闭或者重定向到所需的文件作为log了

1:禁用qDebug输出

在工程的.pro文件里加上以下编译批令即可:

DEFINES += QT_NO_DEBUG_OUTPUT

有些人说在文件中增加该宏定义即可,我测试了一下,不管用的。

2:重定向到指定文件,并设置log level


#include <QtDebug>

#include <QFile>

#include <QTextStream>

 

void customMessageHandler(QtMsgType type, const char *msg)

{

	QString txt;

	switch (type) {

	case QtDebugMsg:

		txt = QString("Debug: %1").arg(msg);

		break;

 

	case QtWarningMsg:

		txt = QString("Warning: %1").arg(msg);

	break;

	case QtCriticalMsg:

		txt = QString("Critical: %1").arg(msg);

	break;

	case QtFatalMsg:

		txt = QString("Fatal: %1").arg(msg);

		abort();

	}

 

	QFile outFile("debuglog.txt");

	outFile.open(QIODevice::WriteOnly | QIODevice::Append);

	QTextStream ts(&outFile);

	ts << txt << endl;

}

 

int main( int argc, char * argv[] )

{

	QApplication app( argc, argv );

 

	//Lets register our custom handler, before we start       

	qInstallMsgHandler(customMessageHandler);	

	...

	return app.exec();

}

3: 简述一下qdebug()的等级

参看qt源代码可以发现,使用QT_NO_DEBUG_STREAM便可以禁用debug,waring,critical信息,但是不会禁用fatal信息,这个需要注意一下。


#ifndef QT_NO_DEBUG_STREAM

    QDebug debug() const;

    QDebug debug(const QLoggingCategory &cat) const;

    QDebug debug(CategoryFunction catFunc) const;

    QDebug warning() const;

    QDebug warning(const QLoggingCategory &cat) const;

    QDebug warning(CategoryFunction catFunc) const;

    QDebug critical() const;

    QDebug critical(const QLoggingCategory &cat) const;

    QDebug critical(CategoryFunction catFunc) const;

 

    QNoDebug noDebug() const Q_DECL_NOTHROW;

#endif // QT_NO_DEBUG_STREAM
时间: 2024-09-28 17:43:16

qt 调试语句的处理 禁用和重定向到文件的相关文章

【Qt5开发及实例】23、Qt调试器的配置,这里以Qt5为例

Qt中安装断点调试 1.设置Qt的调试,首先我们得到windows的网站上下载 WDK:反正就是这个,我用的是8.1的那个 https://msdn.microsoft.com/en-us/windows/hardware/hh852365 这个是地址,下载第一个就可以了. 把这个下载下来,安装 2.Wdk安装步骤 1.双击 2.      等待一下 2.选择路径,我这里是已经安装好了,所以没得选. 3.随意 4.接受 5.下载 6.下载结束 得到的文件夹里面下载下来的东西,你们是没有Qt调试器

使用QT调试助手的设置方法

Qt Creator版本为2.7.0. Qt库版本为4.8.4. MinGW版本为4.40. 此版本的QtCreator的Qt调试助手改用了python,而mingw自带的gdb不支持python,所以需要支持python的gdb,才能使用Qt调试助手. 1.下载支持python的gbd. 支持python的gbd的下载路径如下: http://qt-project.org/wiki/QtCreatorBuildGdb http://download.qt-project.org/develop

18 shell 重定向以及文件描述符

1.对重定向的理解 2.硬件设备和文件描述符 文件描述符到底是什么 3.Linux Shell 输出重定向 4.Linux Shell 输入重定向 5.结合Linux文件描述符谈重定向 6.Shell 对文件描述符的操作 7.改变当前shell环境的重定向目标 8.示例 1.对重定向的理解 Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 输入方向就是数据从哪里流向程序.标准输入方向是指数据从键盘流向程序,

shell 重定向以及文件描述符

1.对重定向的理解 Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 输入方向就是数据从哪里流向程序.标准输入方向是指数据从键盘流向程序,如果改变了它的方向,数据就从其它地方流入,这就是输入重定向. 输出方向就是数据从程序流向哪里.标准输出方向是指数据从程序流向显示器,如果改变了它的方向,数据就流向其它地方,这就是输出重定向. 2.硬件设备和文件描述符 计算机的硬件设备有很多,常见的输入设备有键盘.鼠标.麦

Qt creator error: LNK1123: 转换到 COFF 期间失败: 文件无效或损坏(vs2010的嵌入式清单文件)

下面是vs2010导入别人文件时出现的问题的解决方案:VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误,解决方案为将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”即可,但是没新建一个项目都要这样设置一次.在建立VS2010 Win32 Project项目时,按照上面解决方案依然发生了“error LNK1123”错误,经过上网查资料,解决方案为:第一步:与上相同.第二步:将 项目|项目属性|配置属

IO重定向与文件描述符

1.介绍 IO重定向用于捕捉一个文件,命令,程序,脚本或者代码块的输出,然后把捕捉到的输出作为输入发送给另外一个文件,命令,程序或脚本. 终端程序一般从单一源以流的形式聚集输入和显示输出,script执行时(进程), 系统会默认开启3个标准文件,stdin, stdout,stderr . script默认会由stdin读取数据,默认指键盘,由stdout输出执行结果,默认指屏幕; 若有错误发生,则由stderr显示信息,默认也指向屏幕.系统开启这3个文件时,以文件代码(分别为0,1,2)作为连

C/C++-标准输入/输出重定向为文件输入/输出

/* Time: 2017-02-22 11:11:15 Describe: C++程序将标准输入/输出重定向为文件输入/输出. */ #include <iostream> #include <fstream> #include <string> using namespace std; void f() { string line; while(getline(cin, line)) //input from the file in.txt { cout <&

C++ stderr/stdout 重定向到文件

通常,stderr和stdout被用来输出内容显示到屏幕,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅.最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件. stderr/stdout 重定向到文件 这里以stderr代码说明. #include <stdio.h> #include <stdlib.h> int main( void ) { FILE *stream = freopen( "freopen.out", &qu

错误信息输出,重定向到文件

将错误重定向到文件remove-item none 2> d:\ee.txt 将错误追加到已有文件remove-item none 2>> d:\ee.txt 将错误发送到成功输出流.如果报错后,代码依然继续执行,则Exception不会被捕获到$myerror = Remove-Item "NoSuchDirectory" 2>&1$myError.Exception为空 $error会保存所有错误信息,以倒序排列,即最新的错误信息就是$error[0