C/C++ Debug环境搭建
自己搭建C/C++测试环境,网上的经验有很多,我也是参考了诸多网友的经验总结了两个比较好方法,总结如下。
背景知识:C语言作为一种高级语言无法被机器直接识别,必须要有一个编译器将写好的语言编译为机器能识别的低级语言,这个过程叫做编译,平时直接在DevCPP中进行debug时,软件已经为我们配置好编译器了,我们只要完成代码设计即可仿真验证了;那么如果是自己直接编写源文件不用像DevCPP之类的软件就需要了解相关的编译器和命令,直接通过编译器进行debug。
方法一:小龙 Dev C++
优点:编译环境直接配置好了,只需设计代码即可进行debug,不需要额外的操作。在这里我推荐小龙Dev C++,原有的Dev CPP 已开源并停更,他是在Dev C++的开源基础上进行了一定的汉化以及更新了编译器的升级版Dev C++。具体来说优化点有以下这些。
- 安装简单:安装完毕即可使用,无需额外配置;
- 使用方便:可插入常用代码片段,快速开始编程;
- 支持单文件开发和多文件项目开发;
- 可对代码自动格式化,确保代码书写规范;
- 编译出错信息自动翻译为中文显示;
- 调试时自动显示函数参数和局部变量的值;
- 支持使用图形函数库EGE 和 EasyX
方法二:MinGW + VSCode
这种方法需要对C语言的编译过程有一定的了解,要学习额外的关于编译的知识,上手相对没有那么容易。MinGW( Minimalist GNU for Windows):MinGW-w64
MinGW将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。一句话来概括:MinGW 就是 GCC 的 Windows 版本 。MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 64位 或 32位 可执行程序。正因为如此,MinGW 现已被 MinGW-w64 所取代,且 MinGW 也早已停止了更新,内置的 GCC 停滞在了 4.8.1 版本,而 MinGW-w64 内置的 GCC 则更新到了12.2.0 版本。现在的MinGW-w64分支很多 ,现在我们简要了解一下各版本之间的区别。
Github上的MinGW-W64-binaries : niXman/mingw-builds-binaries: MinGW-W64 compiler binaries (github.com)
i686-12.2.0-release-posix-dwarf-msvcrt-rt_v10-rev2 | x86_64-12.2.0-release-posix-seh-msvcrt-rt_v10-rev2 |
i686-12.2.0-release-posix-dwarf-ucrt-rt_v10-rev2 | x86_64-12.2.0-release-posix-seh-ucrt-rt_v10-rev2 |
i686-12.2.0-release-win32-dwarf-msvcrt-rt_v10-rev2 | x86_64-12.2.0-release-win32-seh-msvcrt-rt_v10-rev2 |
i686-12.2.0-release-win32-dwarf-ucrt-rt_v10-rev2 | x86_64-12.2.0-release-win32-seh-ucrt-rt_v10-rev2 |
"I686"意指适用于32位操作系统的的程序包。
"12.2.0"意指当前程序包版本位12.2.0。
"posix"适用于基于Linux kernel 开发而来的操作系统,如linux,macos。
"win32"适用于基于windows开发而来的操作系统,如windows。
"dwarf,seh,sjlj"这些都是异常处理模型,其中dwarf仅支持32的操作系统,性能较强;seh仅支持64位的操作系统,性能较强;sjlj同时支持32位和64位操作系统,但性能较差。
"msvcrt" 在较老的windows操作系统(win10之前),较低版本的visual studio(2017之前)上使用。
"ucrt"在较新的操作系统和visual studio上使用。
下载好对应的MinGW-W64后解压到目标文件夹下(这个由自己定),然后将mingw下的bin文件夹所在的位置添加到系统环境变量中并在终端中通过 gcc -v 检查是否配置成功。
在完成以上步骤后在 VSCode 中添加"C/C++","C/C++ Extensions","C/C++ Compile Run","Native Debug"插件,此时可通过F6调用"C/C++ Compile Run"的功能直接链接到配置好的 MinGW-W64,进行 debug。当然也可以通过"Native Debug"半自动完成 task.json 和 launch.json 的配置进行仿真,此时是通过建立的 task.json 和 launch.json 进行 Debug,这种 Debug 方式将会导致设计中 GB 2312 格式的中文字符以 UTF - 8 格式输出,目前我还没有找到较好的解决方法。不过要是使用"C/C++ Compile Run","Code Runner"插件直接进行 Debug 则不会产生乱码问题。
PS:直接调用 VSCode 配置的 task.json、launch.json 进行 debug 如果出现中文乱码是因为编码格式不统一产生的,将源文件的编码格式由 GB2312 改为 UTF - 8 即可。
2022-02-13 增补
不过要是想不使用插件在 VSCode 中集成终端 Debug,必须将设计的中文字符集改为 UTF - 8,因为集成在 VSCode 中的终端只支持 UTF - 8 编码,不论是将集成终端设为 PowerShell 或者 CMD 都是一样的,所以最好程序设计中不要出现中文,注释最好也要用英文。
对于如果设计中有中文字符出现,还非要直接使用 VSCode 集成终端 Debug 的同学,我的建议创建一个 UTF_8_Design 存放带有中文字符的设计,如果要转码点击右下角的 UTF-8,然后选择通过编码保存,此时代码中的中文字符可能会乱,不过不要担心,Crtl + Z 一下即会恢复正常,再按下 Ctrl + S 即可保存。或者直接使用 Dev C++ 进行开发,一了百了。
Reference:
1、VScode tasks.json和launch.json的设置 - 知乎 (zhihu.com)
2、vscode 文件配置launch.json tasks.json - 冰糖葫芦很乖 - 博客园 (cnblogs.com)
#C/C++##悬赏#