Qt Creator 19.0.0 在 Windows 上重新运行程序时卡住,如何排查?
从现有现象看,可以先检查 Qt Creator 的停止运行流程及其与外部终端的配合。根据你的测试,不依赖 SFML 的程序也能触发问题,因此 SFML 不是本次故障的必要条件。目前还不能确认这是 Qt Creator 19.0.0 的已知缺陷,也无法确定行为从哪个版本开始发生变化。
暂时使用已验证正常的 Qt Creator 16.0.2 是一个可行的绕过办法。接下来建议对比 19.0.0 使用内部终端和外部 cmd 时的表现,并检查卡住时有哪些进程仍然存活。
先区分程序退出和控制台关闭
重新运行项目需要结束旧程序、处理关联终端,再启动新实例。控制台窗口仍然存在,并不代表目标程序一定还在运行;手动关闭控制台后等待对话框仍不消失,也不能单独证明目标程序没有退出。
“循环似乎停止了”只是观察结果。检查进程后,才能区分是目标程序仍在运行、终端仍在运行,还是 IDE 没有正确完成本次运行的清理。
最小示例中的循环没有主动退出路径,但这正是测试 IDE 停止功能的条件。给循环增加退出条件可以帮助程序正常结束,却不能据此解释两个 IDE 版本重新运行行为的差异。
对比内部终端与外部 cmd
保持项目、Kit 和构建配置不变,分别执行以下测试:
- 在 Qt Creator 19.0.0 中改用内部终端,启动程序后直接再次运行。
- 恢复外部 cmd 配置,重复相同操作。
- 在两种配置下分别测试“先停止,再运行”,记录停止操作是否也会卡住。
- 用 Qt Creator 16.0.2 重复测试,确认差异是否稳定出现。
如果只有 19.0.0 的外部 cmd 配置失败,可以重点检查该版本与外部终端的配合。如果内部终端也失败,则需要继续检查停止运行流程、配置差异和本机进程状态。这些测试有助于定位触发条件,但不能单凭结果认定某个组件存在缺陷。
卡住时检查目标进程
在任务管理器的“详细信息”页,记录目标程序及相关终端进程的 PID。也可以在另一个 cmd 窗口中查询程序是否仍然存在,将 your_app.exe 替换为实际文件名:
tasklist /FI "IMAGENAME eq your_app.exe"
重点记录三种状态:
- 目标程序仍然存在:停止请求可能没有成功结束它,需要结合运行输出继续排查。
- 目标程序已经消失,终端仍然存在:重点检查外部终端配置和退出处理。
- 目标程序与关联终端都已消失,IDE 仍在等待:需要关注 IDE 对运行结束状态的处理。
如果需要清理残留的测试进程,可以在确认 PID 后强制结束。例如,以下命令中的 1234 必须替换为已确认的测试进程 PID:
taskkill /PID 1234 /T /F
/T 会同时结束该进程的子进程,/F 表示强制结束。这个操作只能清理测试进程,不会修复 IDE 的等待逻辑;也不要用它批量结束所有 cmd.exe。
排除配置差异并准备缺陷报告
检查两个 Qt Creator 版本实际使用的外部终端可执行文件和启动参数,确认它们一致。然后使用独立的干净配置测试 19.0.0,保留原有配置,观察问题是否仍然出现。
如果干净配置下仍能稳定复现,报告问题时应附上最小示例、完整操作步骤、内部终端与外部 cmd 的对比结果、卡住时的进程状态,以及完整错误输出。当前材料只提到控制台存在错误信息,没有提供具体内容,因此还无法判断所谓的“崩溃”发生在目标程序、终端还是其他环节。
在定位问题前,可以继续使用 16.0.2;如果内部终端测试正常,也可以将其作为临时方案。提交或检索缺陷时,应明确区分 Qt Creator 19.0.0、Qt 6.11.0 和 MinGW 13.1.0,避免把 IDE 版本与 Qt 库版本混为一谈。
备注:内容仅供参考。
