Qt 调试技巧 #

日志输出 #

qDebug 使用 #

cpp
#include <QDebug>

// 基本输出
qDebug() << "Debug message";
qInfo() << "Info message";
qWarning() << "Warning message";
qCritical() << "Critical message";

// 格式化输出
qDebug("Value: %d", value);

// 输出 Qt 类型
QString text = "Hello";
qDebug() << "Text:" << text;

// 输出容器
QList<int> list = {1, 2, 3};
qDebug() << "List:" << list;

自定义日志处理 #

cpp
void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QString txt;
    switch (type) {
    case QtDebugMsg:
        txt = QString("Debug: %1").arg(msg);
        break;
    case QtInfoMsg:
        txt = QString("Info: %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);
        break;
    }
    
    QFile file("log.txt");
    if (file.open(QIODevice::Append)) {
        file.write(txt.toUtf8() + "\n");
        file.close();
    }
}

// 安装日志处理器
qInstallMessageHandler(myMessageHandler);

Qt Creator 调试 #

断点调试 #

text
1. 设置断点:点击行号左侧
2. 启动调试:F5
3. 单步执行:F10
4. 进入函数:F11
5. 跳出函数:Shift+F11
6. 继续执行:F5
7. 停止调试:Shift+F5

查看变量 #

cpp
// 在调试器中查看 Qt 类型
QString text = "Hello";  // 直接显示内容
QList<int> list = {1, 2, 3};  // 显示所有元素

// 使用调试助手
// Qt Creator 自动格式化 Qt 类型

条件断点 #

text
1. 右键断点 -> 编辑断点
2. 设置条件:i == 10
3. 设置命中次数:命中 5 次后停止

常见问题排查 #

内存问题 #

cpp
// 使用 Q_OBJECT 检查
// 确保类声明中有 Q_OBJECT 宏

// 检查信号槽连接
bool connected = connect(sender, &Sender::signal, receiver, &Receiver::slot);
Q_ASSERT(connected);

// 检查对象生命周期
qDebug() << "Object created:" << this;

线程问题 #

cpp
// 检查线程
qDebug() << "Thread:" << QThread::currentThread();

// 使用 Q_ASSERT 检查线程
Q_ASSERT(QThread::currentThread() == this->thread());

性能问题 #

cpp
// 使用 QElapsedTimer 测量时间
QElapsedTimer timer;
timer.start();

// 执行代码

qDebug() << "Elapsed:" << timer.elapsed() << "ms";

下一步 #

恭喜你完成了 Qt 完全指南的学习!现在你已经掌握了从基础到高级的 Qt 开发知识,可以开始构建自己的跨平台应用了!

最后更新:2026-03-29