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

VSCode运行C++ Hello World程序触发Segmentation Fault求助

问题:VSCode运行C++程序触发Segmentation Fault崩溃

我尝试在VSCode中运行一个简单的Hello World C++程序,但程序触发Segmentation Fault崩溃。代码如下:

#include <iostream>

int main() {
  std::cout << "Hello, World!" << std::endl; 
  return 0;
}

点击「运行C/C++文件」后,调试控制台输出如下:

Thread 1 hit Breakpoint 1, 0x00007ff7cf5b145d in main ()
Loaded 'C:\WINDOWS\SYSTEM32\ntdll.dll'. Symbols loaded.
Loaded 'C:\WINDOWS\System32\kernel32.dll'. Symbols loaded.
Loaded 'C:\WINDOWS\System32\KernelBase.dll'. Symbols loaded.
Loaded 'C:\WINDOWS\System32\msvcrt.dll'. Symbols loaded.
Loaded 'C:\Programs\Git\mingw64\bin\libstdc++-6.dll'. Symbols loaded.
Loaded 'C:\Programs\Git\mingw64\bin\libwinpthread-1.dll'. Symbols loaded.
Loaded 'C:\Programs\Git\mingw64\bin\libgcc_s_seh-1.dll'. Symbols loaded.

Thread 1 received signal SIGSEGV, Segmentation fault.
0x00007fff49f3c226 in ?? () from C:\Programs\Git\mingw64\bin\libstdc++-6.dll

我已尝试更新VSCode及C++扩展、重启软件、检查启动配置等方法,但问题仍未解决。

编辑补充1:调试器似乎正在从C:\Programs\Git\mingw64\bin\加载符号,我不确定为何会加载该路径的符号,我的JSON配置中并未添加该路径。

编辑补充2:实际上这个问题出在我做OpenGL作业时,一个简单的cout语句就导致程序在正常运行前崩溃,我在此提供最小可复现示例。


.vscode配置文件

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": ["4"],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "preLaunchTask": "${defaultBuildTask}",
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-lfreeglut",
                "-lglew32",
                "-lopengl32",
                "-lglu32"
            ],
            "options": {
                "cwd": "C:\\msys64\\mingw64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "compiler: C:\\msys64\\mingw64\\bin\\g++.exe"
        }
    ]
}

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:/msys64/mingw64/bin/g++.exe",
            "cStandard": "c11",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

解决方案

从调试输出看,程序加载了Git自带的MinGW库(C:\Programs\Git\mingw64\bin\libstdc++-6.dll),但你用的是MSYS2的MinGW编译器(C:\msys64\mingw64\bin\g++.exe),库版本不匹配是导致段错误的核心原因。

修复步骤:

  1. 调整系统环境变量优先级

    • 打开系统环境变量设置,找到Path变量,把C:\msys64\mingw64\bin移到C:\Programs\Git\mingw64\bin前面,确保系统优先使用MSYS2的MinGW库。
    • 重启VSCode,让环境变量生效。
  2. 修改tasks.json的编译参数

    • 在编译时添加-static-libstdc++ -static-libgcc参数,强制程序静态链接标准库,避免动态库版本冲突:
      "args": [
          "-fdiagnostics-color=always",
          "${file}",
          "-o",
          "${fileDirname}\\${fileBasenameNoExtension}.exe",
          "-lfreeglut",
          "-lglew32",
          "-lopengl32",
          "-lglu32",
          "-static-libstdc++",
          "-static-libgcc"
      ]
      
  3. 清理旧的可执行文件

    • 删除项目目录下生成的.exe文件,重新编译运行,确保使用新的链接方式生成程序。
  4. 验证库路径

    • 编译完成后,打开命令行,切换到程序所在目录,执行dumpbin /dependents your_program.exe(需安装VS工具集),查看依赖的库是否都是MSYS2路径下的,或者已经静态链接无外部依赖。

如果以上步骤无效,可以尝试卸载Git自带的MinGW组件,或者直接在VSCode的launch.json中添加环境变量,强制指定库路径:

"environment": [
    {"name": "PATH", "value": "C:\\msys64\\mingw64\\bin;${env:PATH}"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:34:52