使用 Vscode 的 cpptools 扩展运行非常简单的 C++ 程序时 VSCode 中的分段错误

Segmentation Fault in VSCode when Running very simple C++ Program with Vscode's cpptools extension

提问人:Sky345 提问时间:11/1/2023 最后编辑:ppperySky345 更新时间:11/2/2023 访问量:116

问:

此问题是从超级用户迁移而来的,因为它可以在 Stack Overflow 上得到回答。21 天前迁移

我决定先在这里问这个问题,然后再寻求在 vscode-cpptools Github 存储库上提出问题。因为你知道,无论哪种方式,它都可能在我这边,并且可能是一个非常愚蠢的问题,有人已经经历过。

下面是该错误的屏幕截图:

以下是 Vscode 中 #include 错误诊断:


问题描述

尝试在Visual Studio Code中使用vscode-cpptools扩展运行简单的C++程序时,我遇到了一个持续存在的问题。尽管遵循了建议的步骤,我还是收到“分段错误”错误,该错误似乎不合适。该问题仅发生在我的笔记本电脑上,因为我已成功在台式计算机上复制了相同的环境,没有任何问题......这很奇怪。值得一提的是,两台机器都同步了 VSCode 安装。

我尝试重新安装 mingw64 几次,并且我按照 Visual Studio Code 的“Visual Studio Code 中的 C++ 和 MinGW-w64 入门”教程的建议使用 ucrt64 环境。

我正在使用 g++ 进行编译,它在我的所有终端中都正确安装并运行。

我已经尝试了运行代码的所有三个可用选项,包括“运行代码”,但分段错误仍然存在。当我选择最后一个选项“运行 C/C++ 文件”时,出现一条警告消息,然后像以前一样发生分段错误。

这是我尝试选择“运行 C/C++ 文件”选项时收到的警告窗口


相关 GitHub 问题

我在 vscode-cpptools GitHub 存储库(问题 #7414)上发现了一个相关问题,其中包括与我自己的屏幕截图类似的屏幕截图。但是,我没有发现这两个问题之间有任何明显的联系,并且我的编辑器中没有设置任何断点。


代码示例

以下是文件,以防有人想尝试重现该问题:hello_world.cpp

#include <iostream>

using namespace std;

int main() {
    cout << "Hello World!\n";

    return 0;
}

这是它在尝试构建程序时生成的:task.json

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

同样,这很奇怪,因为我已经复制了我在桌面上安装 mingw 和 g++ 所采取的确切步骤,但只有笔记本有这个问题。

C++ mingw 分段错误

评论

0赞 drescherjm 11/1/2023
确保环境变量中没有其他版本的 MinGW 运行时。PATH
0赞 drescherjm 11/1/2023
另请参阅测试程序是否可直接从终端正确运行。"C:\msys64\ucrt64.exe"
1赞 drescherjm 11/1/2023
我不认为 GitHub 问题相关。我相信你有Dll地狱
1赞 user4581301 11/1/2023
而且您需要担心的不仅仅是其他 mingw 安装。系统路径中保存 mingw 库 DLL 的任何文件夹都可能是恶棍。我已经在使用 mingw 构建的其他工具以及其他使用用 C++ 编写的库的编程语言中看到了这一点。避免DLL地狱的唯一好方法是非常小心添加到系统路径的内容。可悲的是,互联网上几乎每个<脏话删除>工具 X 入门教程都说,“将其添加到路径中。大屠杀接踵而至。
0赞 Sky345 11/2/2023
@user4581301 是的,这似乎是问题的根本原因。事实证明,我最初从“C:\”中删除了整个“msys64”文件夹,认为以后重新安装就足够了。但是,我忽略了从系统的 PATH 中删除“C:\msys64\ucrt64\bin”。我认为这是不必要的,因为我在同一目录中重新安装。但事实证明,即使在卸载所有软件包后,我也必须从 PATH 中删除此特定条目,然后重新添加它才能顺利运行。

答: 暂无答案