[DTK] Qt中qDebug不输出的解决方法
Tofloor
default avatar
sammy-621
deepin
2022-04-27 10:37
Author

Deepin 下,Qt 开发者经常遇到的一个问题是,qDebug不能输出,给调试带来不便。网上的已有通过个性系统变量的可行的解决方案,可参考这里。这种方式是可行的。
但因为对系统环境变量的修改,操作略复杂,对新手来说也容易出错,因此本文写的是另外一种方法。
通过Application Outpupt看到有这样一行信息:QML debugging is enabled. Only use this in a safe environment.,这表示未输出调试信息,可能是跟用户环境权限有关。在Qt Creator中,打开左侧的Projects,依次找到Build&Run ->Run -> Run as root user,选中以root用户运行。如下图:
image.png

切换加Edit,首次按下Ctrl+R运行,会有提示要求输入root用户的密码,录入后,就可以看到qDebug的输出信息了。本项目的后面的运行、调试,均不会再要求密码验证了。
image.png

本文所涉及的环境是:Deepin,Qt 6.* ,Qt Creator 7。对其它Linux环境应该也有参考意义。

Reply Favorite View the author
All Replies
MouseZhang
Deepin Wiki Editor
2022-04-27 10:44
#1

QML debugging is enabled.Only use this in a safe environment.这个是说开启了QML调试功能,和qDebug不输出没有关系。你以root运行可以输出应该是因为普通用户和root用户的环境不一致导致。

Reply View the author
zccrs
deepin
2022-04-27 11:14
#2

不建议用这种方式,我们之后会去掉 QT_LOGGING_RULES=*.debug=false 的环境变量设置。 @tsic

Reply View the author
sammy-621
deepin
2022-04-27 11:19
#3
MouseZhang

QML debugging is enabled.Only use this in a safe environment.这个是说开启了QML调试功能,和qDebug不输出没有关系。你以root运行可以输出应该是因为普通用户和root用户的环境不一致导致。

感谢指正。你的意思是,如果root用户的环境变量也是
QT_LOGGING_RULES=*.debug=false,它同样是无法输出调试信息的?
可是有一点我没想明白,00deepin-dde-env 这个文件中的环境变量是不是全局的?如果是,那我并未修改这个变量,通过Run as root user,也能正常输出。如果不是,那非root用户的环境变量QT_LOGGING_RULES在哪里体现呢?

Reply View the author
sammy-621
deepin
2022-04-27 11:25
#4
zccrs

不建议用这种方式,我们之后会去掉 QT_LOGGING_RULES=*.debug=false 的环境变量设置。 @tsic

如果去掉这个:QT_LOGGING_RULES=*.debug=false,会不会导致Qt的Application Output里输出Qt的详细运行日志?因为这个配置行里,还有qt.*.debug=false的配置,有这个配置,才屏蔽了系统的Qt运行日志,*.debug=true;qt.*.debug=false这两个配合使用,才能实现只输出用户qDebug的调试日志。

Reply View the author
zccrs
deepin
2022-04-27 11:29
#5
sammy-621

如果去掉这个:QT_LOGGING_RULES=*.debug=false,会不会导致Qt的Application Output里输出Qt的详细运行日志?因为这个配置行里,还有qt.*.debug=false的配置,有这个配置,才屏蔽了系统的Qt运行日志,*.debug=true;qt.*.debug=false这两个配合使用,才能实现只输出用户qDebug的调试日志。

不会,Qt库自己的日志默认就是不会输出 debug 级别的

Reply View the author
[^_^]
deepin
2022-04-28 09:38
#6
sammy-621

感谢指正。你的意思是,如果root用户的环境变量也是
QT_LOGGING_RULES=*.debug=false,它同样是无法输出调试信息的?
可是有一点我没想明白,00deepin-dde-env 这个文件中的环境变量是不是全局的?如果是,那我并未修改这个变量,通过Run as root user,也能正常输出。如果不是,那非root用户的环境变量QT_LOGGING_RULES在哪里体现呢?

以root运行似乎的环境变量似乎是不完整的,所以可以看到日志输出。

Reply View the author