运行QT的exe程序时将QDebug调试信息输出到控制台

在VS2013中开发QT程序时遇到DLL符号加载问题,影响调试。文中提供了两种方法来实现调试信息的输出:一种是通过修改.pro文件添加CONFIG=console,另一种是在main函数中使用AllocConsole()和freopen()函数创建控制台并重定向输出。作者采用第二种方法成功解决问题,并提醒在发布版本时应移除调试输出。
摘要由CSDN通过智能技术生成

前言

        使用VS2013开发,Debug时一直加载dll符号,无法正常调试。按照网上的方法,关掉了符号加载,之后Debug时程序可以正常运行,但是因为没有dll符号,无法watch变量,也不能调试。因此选择在运行QT 的exe程序时,将调试信息输出到控制台。

方法

方法一

这个是查阅资料,有博主使用的方法,在Qt项目的.pro文件中添加CONFIG += console,确保Qt应用程序以控制台应用程序的方式运行。这样,QDedbug的输出会显示在运行程序的命令行窗口(或控制台窗口)中。例如:

TEMPLATE = app
CONFIG += console

方法二

这个是我使用的方法,在main函数中使用AllocConsole()函数来分配一个新的控制台窗口,并使用freopen函数将标准输出和标准错误输出重定向到控制台。这样,QDebug的输出将显示在这个控制台窗口上。以下是示例代码:

#include <QCoreApplication>
#include <QTextStream>
#include <QDebug>
#include <Windows.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 分配一个新的控制台窗口
    AllocConsole();

    // 重定向标准输出和标准错误输出到控制台
    freopen("CONOUT$", "w", stdout);
    freopen("CONOUT$", "w", stderr);

    // 使用QDebug输出调试信息
    qDebug() << "Hello, this is a debug message.";

    return a.exec();
}

总结

我是在VS2013中配置的QT开发环境,工程里没有pro文件,选择了第二种方法。实测可以运行。

注意

在发布版本时,删除或禁用这些额外的调试输出,以避免在最终发布的可执行文件中产生不必要的日志输出。

Qt中,打包成.exe文件后,通常不会直接包含调试信息,因为这会增加程序大小并且不是最终用户需要的内容。如果你想记录运行的日志并查看调试信息,可以采取以下步骤: 1. **设置Qt应用日志**: 在Qt项目的`main.cpp`或其他适当位置,添加日志框架,如QLoggingCategory、Qt Logging或是自定义的日志模块。例如,你可以配置QDebug的日志输出: ```cpp #include <QDebug> qInstallMessageHandler([](const QMessageLogContext& context, const QString& msg) { // 将消息发送到控制台或者其他日志处理器 qDebug() << "LOG - " << context.file << ":" << context.line << ": " << msg; }); ``` 2. **选择合适的日志工具**: 使用QDir,你可以创建一个目录来存储日志文件,比如`"./logs"`,然后在每次你需要写入日志指定这个路径: ```cpp QDir logDir(QStringLiteral("./logs")); if (!logDir.exists()) { logDir.mkpath(QStringLiteral("./logs")); // 创建目录如果不存在 } QString logFilePath = logDir.filePath(QStringLiteral("app.log")); qDebug() << "Writing to file:" << logFilePath; qDebug() << "Your debug message here"; ``` 3. **打包处理日志文件**: 当打包成`.exe`,确保日志文件路径是在应用程序安装目录下,而不是作为资源的一部分。对于Windows,你可以在程序启动前检查文件是否存在,如果不存在就创建它。 4. **打包设置**: 在构建项目,确保选择了适当的发布模式(Release而非Debug),因为Debug模式会包含额外的调试信息,而Release模式更轻量。如果你确实需要调试信息,可以在调试环境下单独分析。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值