q调试不显示任何内容

qDebug not displaying anything

本文关键字:任何内 显示 调试      更新时间:2023-10-16

通常,当我需要调试某些内容时,使用qDebug()打印某些内容比使用调试器逐步调试更容易。问题是有时根本不显示qDebug()的输出!qWarningqCritical也是如此.奇怪的是,它仅在正常运行项目(Ctrl + R)时发生,而在调试(F5)时显示输出。

解决方案很简单:将CONFIG += console添加到 .pro 文件并重新生成整个项目。

对我来说的解决方案,如 https://bugzilla.redhat.com/show_bug.cgi?id=1227295#c10 中所述:

  1. /etc/xdg/QtProject/寻找qtlogging.ini
  2. 编辑当前文件(如果缺少文件,则qtlogging.ini创建文件)
[Rules]
*.debug=false

[Rules]
*.debug=true
qt.*.debug=false
  1. 重新编译并检查!

如果您正在运行多个Qt Creator实例,qDebug将无法正常工作。

我遇到了同样的问题,这里的答案都没有帮助我。我在这里找到了解决方案:https://lists.fedoraproject.org/archives/list/kde@lists.fedoraproject.org/thread/SB6QJZGVDLWWBZCMTNKMVZSSPPNREOYJ/

我必须设置 QT_ASSUME_STDERR_HAS_CONSOLE=1。这可以在代码中完成:

qputenv("QT_ASSUME_STDERR_HAS_CONSOLE", "1");

或者更好的是"环境"下的"套件"设置。

我解决这个问题

的解决方案使用

Windows 10 Education
Qt Creator (5.x)
Developing a Qt widget.

问题:

所以我的问题是每当我添加一条QDebug消息时,它都不会显示在应用程序输出中,尽管我的代码与教程中的代码 100% 相同并且编译良好。

溶液:

右键单击您添加QDebug消息的文件,对我来说,它是main.cpp.单击构建。按底部的绿色箭头。

如果这仍然不起作用,请转到"Build"->"CleanAll","Build"->"qMake",然后再次使用绿色箭头。

当然,您必须#include <QDebug>并检查代码中的拼写是否正确。

就我而言,不知何故我忘记单击"配置项目"。我正在使用 QTCreator 4.11 和 Qt5.14。创建项目时,我没有在创建过程结束时单击"配置项目"。

Qt5.14.2, QtCreator 4.12.0:对我有用的是取消选择项目->在终端中运行->运行...咄!

您必须配置日志记录规则。请参阅文档。

格式为:

    <category>[.<type>] = true|false
日志记录规则

从日志记录配置文件中的 [规则] 部分自动加载。这些配置文件在QtProject配置目录中查找,或在QT_LOGGING_CONF环境变量中显式设置:

    [Rules]
    *.debug=false
    driver.usb.debug=true

也可以在QT_LOGGING_RULES环境变量中指定日志记录规则;多个规则也可以用分号分隔:

    QT_LOGGING_RULES="*.debug=false;driver.usb.debug=true"

例如:

QT_LOGGING_RULES="*.debug=true;qt.*=false"

通过添加以下内容来解决:

export QT_ASSUME_STDERR_HAS_CONSOLE=1

将启动脚本放置在:

/home/yourUsername/qtcreator-10.0.0/bin/qtcreator.sh

由从官方网站下载的应用程序提供。

#! /bin/sh
export QT_ASSUME_STDERR_HAS_CONSOLE=1
# Use this script if you add paths to LD_LIBRARY_PATH
# that contain libraries that conflict with the
# libraries that Qt Creator depends on.
makeAbsolute() {
    case $1 in
        /*)
            # already absolute, return it
            echo "$1"
            ;;
        *)
            # relative, prepend $2 made absolute
            echo `makeAbsolute "$2" "$PWD"`/"$1" | sed 's,/.$,,'
            ;;
    esac
}
..
//some lines...
..
export LD_LIBRARY_PATH
exec "$bindir/qtcreator" -user-library-path "$_ORIGINAL_LD_LIBRARY_PATH" ${1+"$@"}.

更新:上述解决方案对Qt Creator有效。使用像 xterm 这样的终端来启动、分离、使用 QProcess 类启动另一个 Qt 应用程序的 Qt 应用程序(在我的例子中,在一个有多个子项目的项目中),第一个中的 readyReadStandardError() 信号会正确获得第二个信号的 stdrr,直到进程之间的通信中断时终端关闭。我解决了第二个问题,添加了

     qputenv("QT_ASSUME_STDERR_HAS_CONSOLE", "1");

主要.cpp所以:

    #include "frmparman.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        qputenv("QT_ASSUME_STDERR_HAS_CONSOLE", "1");
        a.setStyle("windows");
        frmParman w;
        w.show();
    
        return a.exec();
    }