约 1447 字
预计阅读 3 分钟
瞎折腾MinGW
2024-02-02
计算机
AI 摘要
109酱

嗨,大家好,我是 Chlorine.

本期的主要内容是讲述我更新 MinGW 的痛苦经历,寄术力不高,大佬轻喷。引用一句某乎上的话:

知识就是这样的,也许一个问题在老鸟看来是一颗土坷垃,但对于初学者却是一座大山。

当年我们在学递归之后,老师布置了一个上机作业,要求原文如下:

以汉诺塔源程序为对象,参照 PPT 上关于阶乘示例的递归调用与返回过程的示意图,在集成开发环境中,以单步跟踪方式,打开汇编代码和机器代码显示功能,观察函数调用栈(内存)的变化情况,观察程序执行时“当前待执行机器指令”随着单步执行的变化情况。在发生递归调用时,记录函数实参和形参的地址与内容,记录函数调用结束后的返回点指令地址。

这其实是个简单得离谱的任务,更不用提写上机报告一向是我引以为豪的能力(期末成绩,上机报告部分 99.9 分,扣掉的 0.1 是因为第一篇是用 Obsidian 写的,导出的时候标题没居中)。

可是问题是:我不会单步跟踪调试。(上课摆烂的后果 qaq)

跟着助教的讲解视频,查网上的教程,甚至是安了好几个其他的 IDE,都是完不成,我好像就和调试有仇。

最后幸好一位好心的 TA 学长教了我一些命令行调试,才让我把报告写出来(最后成绩是满分 q(≧▽≦q))。

所以以后我在做单步跟踪调试的时候,一直都是在用命令行。不是说命令行不好,但是的确有点复杂。此外,我在写 C++ 教程的时候,总不能上来就往人家脸上糊命令行吧().

最近我发现了一个很好玩的 Github 项目: Bill-Haku/kawaii-gcc: GCCコンパイラーを可愛くしましょう!Make your GCC compiler kawaii. (github.com)

这里是 B 站解说视频地址: 【中文】杂~鱼♡!人家 GCC 也想变得可爱嘛~】

说实话,我看完之后,真的感觉:好可爱!

然后我忧伤地得知目前只支持 Cygwin。

但是,我折腾的兴奋度已经被挑起来了。不折腾点什么,我是不会罢休的。

综合以上两段原因,我决定折腾下我的 VS Code + MinGW-w64。

终端里扔个 gcc -v, 发现我的 gcc 居然才 8.1.0,于是我决定更新。

MinGW 没有什么一键更新的命令,同时官网上一大堆离奇的布局看得我五彩缤纷。

于是我找到了 MinGW-64 的 Github 二进制仓。直接把 release 的最新版本下载下来,解压完事。

PS: 我下载的是 x86_64-13.2.0-release-posix-seh-ucrt-rt_v11-rev0.7z

解压的时候我图省事,解压到了默认的 download 文件夹,本来想着一会给移到我原本的 D 盘去,结果遇见了这样的擀人速度:

(图片丢了,乐)

好吧,不管怎么样,总算是挪过去了。由于我解压之后的文件夹也叫 mingw,因此直接替换了原本的老版本文件,省去了再配一遍环境变量的麻烦。

然后随便开个终端,键入版本检查指令 gcc -v, g++ -vgdb -version,发现更新成功了。

其实这也不是什么难事,也就是几个文件的事,但是 VS Code 这厮总是给我闹幺蛾子,于是干脆自己动手写(抄)文件.

把原本 C++ 文件夹的 .vscode 子文件夹删空,新建三个文件,把当时留下的代码扔进去:

// c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "D:\\\\mingw64\\\\bin\\\\gcc.exe",
            "intelliSenseMode": "windows-gcc-x64",
            "cppStandard": "c++23",
            "cStandard": "c23"
        }
    ],
    "version": 4
}
// launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\\\mingw64\\\\bin\\\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 生成活动文件"
        }
    ]
}
// tasks.json
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "D:\\\\mingw64\\\\bin\\\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

重启 VS Code,随便写个 C++ 文件,在左侧工具栏尝试可视化调试,完美。

(图片又丢了,乐)

就折腾到这吧。尽管说有了可视化调试的方法,但是我可能还是习惯于用命令行。这次折腾大概还是为了解决强迫症的历史遗留问题。

毕竟我还是无法拥有可爱的 GCC qaq

感谢隔壁北大一位学长的教程用vscode优雅配置c/c++环境!

瞎折腾MinGW
https://www.yoghurtlee.com/how-to-update-mingw/
作者
Chlorine
发布于
2024-02-02