Qt 创建器 - 代码正在运行,但我从 IDE 收到错误消息

Qt Creator - Code is running but I get an error message from the IDE

本文关键字:IDE 消息 错误 创建 代码 运行 Qt      更新时间:2023-10-16

一旦我运行我的代码(请注意,我只使用C,没有QT,也没有C++),我就会从IDE中的应用程序输出中收到以下消息:

无法获取下级的句柄:参数不正确。

当我删除生成文件和调试/发布文件夹时,它正在运行,但一段时间后我仍然收到错误。不过这不是什么大问题,代码运行并且一切正常,但是弹出此错误并且非常烦人。

.pro 文件的内容是:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
QMAKE_CC = gcc -std=c99
SOURCES += main.c

提前感谢!


编辑:我添加了C++标签,因为此错误也发生在C++控制台应用程序中,就像我的情况一样。

我遇到了同样的问题。论坛上的提示和建议相当无能为力,所以我自己调查了问题,我发现这是QtCreator中的一个错误。

有一个肮脏的小程序叫qtcreator_process_stub。每当在 IDE 中运行程序时,IDE 都会首先运行qtcreator_process_stub并将程序名称作为参数(以及其他一些参数)传递。 然后qtcreator_process_stub程序作为单独的进程启动并打印其PID(在Windows上还有线程ID)。信息被打印到管道上,然后由ConsoleProcess::readStubOutput()读取,这是QtCreator使用的Utils.dll库的一部分。

当"劣质"进程(您的应用程序)在整个通信处理之前完成执行时,会出现此问题。ConsoleProcess::readStubOutput()尝试在具有封闭句柄的不存在的进程中使用OpenProcess()OpenProcess()失败,因此错误"无法获取下级的句柄:参数不正确。整个错误没有得到非常温和的处理(嗯,现在呢?... :-/

解决方案:当你添加一些用户输入动作时,暂停、休眠、延迟或只是一些循环,这样你的应用执行时间稍长一点错误就会消失。在应用程序退出之前,ConsoleProcess::readStubOutput()有足够的时间执行OpenProcess()。因此,作为工作对象,我建议这样做,直到错误得到修复。

我在Qt中处理C++项目时反复遇到同样的错误。我能够通过将我正在使用的共享库之一(.dll)复制到构建文件夹中来解决它。

因此,如果您使用的是运行时所需的任何共享外部库,请确保它们位于 build 文件夹中。