遇到的问题集合
- mingw官方下载网站(https://sourceforge.net/projects/mingw-w64/files/)更新之后,与网上大多数教程上写的界面不同了。
网上大多数教程让下载这个:
但是现在找不到这个文件。
-
写hello.c文件时,报错:无法找到stdio.h。听说解决办法在这“https://www.jianshu.com/p/a2a4bc46f30e”,但是对我无效。我的办法是重装vscode和mingw,重来一遍,可以了。
-
build之后的hello.exe文件可以在vscode终端正确运行并打印出"hello world!",但是一调试就闪退,原因是编译生成的是x64程序,与电脑平台不兼容。虽然我的电脑是x64架构,但是不知道为什么在文件管理器中双击hello.exe文件,无法运行,显示我的电脑无法打开该文件。我的解决办法是:
vscode中,ctrl+shift+P, 输入:
找到:
将windows-gcc-x64改为windows-gcc-x86,重新编译即可。 -
正常运行之后,无法调试。gdb似乎忽略了断点,直接运行完然后退出,表现出来的就是闪退。原因是编译时候没有加入-g选项。那么怎么加入-g选项呢?在task.json中加。
下面具体描述流程。
安装流程
- 下载mingw
源代码网址:https://github.com/niXman/mingw-builds-binaries/releases
下载这个x86_64-14.2.0-release-posix-seh-ucrt-rt_v12-rev0.7z:
下载完后解压到D:\appData\如下:
配置系统变量环境:
D:\appData\mingw64\bin
cmd测试:
gcc -version
gdb -version
g++ -version
- 安装vscode
安装插件,这些都装上:
配置一些全局变量:
vscode中,ctrl+shift+P, 输入:
找到:
修改平台架构为x86。
填写自己的gcc路径。
ctrl+shift+P, 输入:C/C++: Select IntelliSense Configuration
我现在(完全配置好了)双击之后是这个:
但是第一次双击这个不是这个画面,是很奇怪的东西。那个时候我选的好像是Other这个选项。然后走一步看一步吧。复现不了了现在。
- 在桌面创建项目文件c_ex,项目结构如下:
c_cpp_properties.json文件内容如下:
{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "D:/appData/mingw64/bin/gcc.exe",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "windows-gcc-x64",
"compilerArgs": [
"-g",
"-o",
"test.exe"
]
}
],
"version": 4
}
launch.json文件内容如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "My Debug",
"type": "cppdbg",
"request": "launch",
"program": "c:/Users/whu_z/Desktop/c_ex/test.exe",
"args": [],
"stopAtEntry": false,
"cwd": "c:/Users/whu_z/Desktop/c_ex",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "D:/appData/mingw64/bin/gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "My build",
"miDebuggerArgs": "",
"filterStderr": false,
"filterStdout": false
},
{
"name": "C/C++ Runner: Debug Session",
"type": "cppdbg",
"request": "launch",
"args": [],
"stopAtEntry": false,
"externalConsole": true,
"cwd": "c:/Users/whu_z/Desktop/c_ex",
"program": "c:/Users/whu_z/Desktop/c_ex/build/Debug/outDebug",
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
settings.json由vscode自动生成。
task.json内容如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "My build",
"type": "shell",
"command": "D:/appData/mingw64/bin/gcc.exe",
"args": [
"c:/Users/whu_z/Desktop/c_ex/test.c",
"-g",
"-o",
"c:/Users/whu_z/Desktop/c_ex/test.exe"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"],
"detail": "Generated task to build hello.c"
}
]
}
注意:当我写完hello.c文件后,vscode马上自动生成.vscode文件夹,里面有3个文件如上3个(除了tasks.json),但是内容不一样。我修改了除了settings.json文件的其它2个json文件内容,并添加了一个task.json文件。
hello.c文件内容如下:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a = 1;
int b = 2;
int c = a + b;
printf("%d", c);
printf("hello, world!");
system("pause");
return 0;
}
一些感悟
tasks.json是用于设定如何编译文件的,设定编译动作。
launch.json是用于debug设置的。
c_cpp那个json文件用于配置编译器路径的。