如何让Windows命令提示符报告程序访问违例错误?
在Windows命令行中显示程序崩溃信息的方法
恢复崩溃弹窗提示
Windows默认给控制台程序关闭了崩溃弹窗,你可以通过修改注册表找回这个功能:
- 打开注册表编辑器(运行
regedit) - 找到路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps,如果没有LocalDumps项,右键新建一个项 - 在
LocalDumps下创建几个DWORD值:DumpType:设置为1(生成迷你崩溃转储)DumpFolder:指定一个已存在的文件夹路径(比如C:\CrashDumps)
- 另外,若要完全恢复旧版Windows的GPF弹窗,还可以修改
HKEY_CURRENT_USER\Control Panel\Desktop下的AutoEndTasks为0,HungAppTimeout设为10000(可选)
修改完成后,控制台程序崩溃时会弹出错误提示框,同时在指定目录生成崩溃转储文件。
在命令行直接获取崩溃反馈
用CMD检查错误级别
程序崩溃时,系统会设置%ERRORLEVEL%为特定非0值(访问违例通常是-1073741819,对应十六进制0xC0000005),执行程序后立刻查看:
foo.exe echo %ERRORLEVEL%
如果返回上述数值,就说明触发了访问违例。
切换到PowerShell
PowerShell对程序崩溃的反馈更直接,运行程序后会直接显示崩溃信息:
.\foo.exe
崩溃时会输出类似 Program 'foo.exe' crashed with exception code 0xC0000005. 的提示。
配合调试工具用gdb查看详细错误
编译时加上-g参数生成调试信息:
g++ -g -o foo.exe foo.cpp
然后用MinGW自带的gdb运行程序,崩溃时会在命令行直接显示错误位置和调用栈:
gdb ./foo.exe run
程序崩溃后,gdb会输出具体的错误原因、触发地址,还能通过bt命令查看完整调用栈,快速定位问题。
内容的提问来源于stack exchange,提问作者John Rennie
相关产品推荐
相关产品推荐

