Visual Studio 2022调试时触发0xc0000142错误(Windows Terminal默认)
问题:Windows Terminal作为默认终端时,关闭控制台窗口触发0xc0000142错误并反复弹出
问题重现
- 环境:Windows 11 22H2(22621.675)、Visual Studio 2022,Windows Terminal为系统及VS默认终端
- 测试代码:
#include "stdafx.h" #include <iostream> using namespace std; int main() { for (int i = 0; i < 10; i++) { printf("num: %d\n", i); system("pause"); } }
- 现象:程序运行中点击控制台窗口右上角关闭按钮,弹出「应用程序无法正常启动(错误: 0xc0000142)」窗口;关闭错误窗口后会反复弹出(次数等于循环次数),即使关闭IDE也会出现;改用
Ctrl+Pause终止程序无异常,切换默认终端为cmd.exe后错误消失。
成因分析
结合Process Explorer的测试结果,核心问题在于Windows Terminal的进程关联逻辑和system("pause")的调用机制:
- Terminal内拖拽运行场景:test.exe是Windows Terminal的子进程,关闭Terminal时会终止整个进程树,test.exe直接被终止,不会触发后续的
system("pause")调用,因此无异常。 - 双击运行/VS调试场景:Windows Terminal与test.exe无直接进程关联,关闭窗口时仅终止Terminal进程,但test.exe仍在运行。此时test.exe的后续
system("pause")尝试启动新的终端会话,但Windows Terminal的初始化依赖已被破坏,导致启动失败,抛出0xc0000142(应用程序初始化失败)错误;循环中的每一次system("pause")都会触发一次错误弹窗,因此会反复出现。
解决方法
1. 替换system("pause")为更安全的方案
system("pause")依赖终端环境且会创建外部进程,建议改用不依赖外部进程的暂停方式:
// 方案1:使用cin等待输入 cin.get(); // 方案2:使用_getch()(需包含<conio.h>) #include <conio.h> _getch();
这类方法无需启动外部终端进程,即使终端窗口被关闭,程序会直接终止而非反复触发错误。
2. 修改Windows Terminal的关闭行为
打开Windows Terminal设置,进入「启动」选项卡,将「关闭行为」设置为「关闭所有窗口时终止所有进程」。这样在双击运行程序时,关闭Terminal窗口会同时终止关联的test.exe进程,避免后续错误触发。
3. 调试时使用VS内置控制方式
在VS2022中,调试时通过「调试」菜单的「停止调试」(快捷键Ctrl+Shift+F5)终止程序,而非直接关闭终端窗口,从根源避免触发错误。
内容的提问来源于stack exchange,提问作者Oliver Yu
相关产品推荐
相关产品推荐

