You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win11下Qt+PCL+OpenCV程序调试时MSCTF.dll断言失败求助

解决Win11下Qt Creator调试时MSCTF.dll断言失败问题

环境配置

  • MSVC v142
  • Win10 SDK(10.0.19041.0)
  • PCL 1.12.1
  • OpenCV 4.8.0
  • Qt 5.15.2

问题现象

调试模式下运行程序时触发报错:

clientcore\windows\advcore\ctf\uim\tim.cpp(800)\MSCTF.dll!00007FFA625262B9:
(caller: 00007FFA62526EEC) LogHr(1) tid(267c) 8007029C
An assertion failure has occurred.

最小复现代码

头文件 minimal.h

#ifndef MINIMAL_H
#define MINIMAL_H

#include <QMainWindow>
#include <pcl/io/pcd_io.h>
#include <opencv2/opencv.hpp>

QT_BEGIN_NAMESPACE
namespace Ui
{
  class Minimal;
}
QT_END_NAMESPACE

class Minimal : public QMainWindow
{
  Q_OBJECT

public:
  Minimal(QWidget *parent = nullptr);
  ~Minimal();

private:
  bool readPcd(const QString &file, pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud);

  bool readImage(const QString &file, cv::Mat &image);

  Ui::Minimal *ui;
};
#endif // MINIMAL_H

源文件 minimal.cpp

#include "minimal.h"
#include "./ui_minimal.h"
#include <QDebug>

Minimal::Minimal(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::Minimal)
{
  ui->setupUi(this);

  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
  readPcd("..\\example_data\\20210209152054.pcd", cloud);
  qDebug() << "cloud size is " << cloud->points.size();

  cv::Mat image;
  readImage("..\\example_data\\20210209152054.jpg", image);
  qDebug() << "image size is " << image.cols << " x " << image.rows;
}

Minimal::~Minimal()
{
  delete ui;
}

bool Minimal::readPcd(const QString &file, pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud)
{
  cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
  if(pcl::io::loadPCDFile(file.toStdString(), *cloud) == -1)
  {
    std::cout << "read pcd file error " << std::endl;
    return false;
  }
  return true;
}

bool Minimal::readImage(const QString &file, cv::Mat &image)
{
  image = cv::imread(file.toStdString());
  return (!image.empty());
}

main.cpp

#include "minimal.h"

#include <QApplication>
#include <QLocale>
#include <QTranslator>

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

    QTranslator translator;
    const QStringList uiLanguages = QLocale::system().uiLanguages();
    for (const QString &locale : uiLanguages) {
        const QString baseName = "Minimal_" + QLocale(locale).name();
        if (translator.load(":/i18n/" + baseName)) {
            a.installTranslator(&translator);
            break;
        }
    }
    Minimal w;
    w.show();
    return a.exec();
}

解决方案

该报错来自系统组件MSCTF.dll(文本服务框架),属于Win11调试环境与旧版Win10 SDK的兼容性问题,和业务代码逻辑无关,可通过以下方式解决:

  1. 禁用终端运行模式
    进入项目的Run Settings,取消勾选Run in terminal,让程序使用Qt内置输出窗口替代系统控制台。

  2. 调试器忽略断言错误
    打开Tools > Options > Debugger > CDB,在Additional startup commands中添加:

    sxe -c "gn" 8007029C
    

    这条命令会让调试器忽略该特定错误码的断言,不中断程序执行。

  3. 升级Win10 SDK版本
    尝试将Win10 SDK升级到10.0.22000.0及以上版本,新版SDK对Win11的兼容性更好,可修复底层框架的断言问题。

  4. 切换Release模式验证
    该断言仅在Debug模式下触发,Release模式通常不会出现此问题,可先切换模式确认程序功能正常。


内容的提问来源于stack exchange,提问作者user16138748

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:43:11