赞
踩
采用排除法:
1.是否将工作文件夹添加工作区?
打开vscode -》 文件 -》 打开文件夹 -》文件 -》将文件夹添加工作区(或者另存为一个),把工作区文件放到工作文件夹里。
如下:Manager.code-workspace
工作区结构:.vscode文件夹装配置文件,.code-workspace工作区,ManagerSys.h类的声明,ManagerSys.cpp类成员函数(方法)的定义,ManagerSystemMain.cpp主程序
2.基础文件配置?
电脑上编译器是下载的MinGW里面的g++,保存位置在D:/Mingw/mingw64/bin/g++.exe
2.1 配置c_cpp_properties.json文件:
includePath是包含头文件的路径,需要把当前工作文件夹路径加入进去,例如此处添加就是Manager那个路径。
每个工作文件都需要增加自己的
- {
- "configurations": [
- {
- "name": "Win32",
- "includePath": [
-
- "${workspaceFolder}/**",
- "D:/Mingw/mingw64/include/**",
- "D:/Mingw/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/**",
- "D:/Mingw/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward/**",
- "D:/Mingw/mingw64/include",
- "C:/Users/YHW/Desktop/Ctest/**",
- "C:/Users/YHW/Desktop/Manager/**"
- ],
- "defines": [
- "_DEBUG",
- "UNICODE",
- "_UNICODE"
- ],
- "compilerPath": "D:\\Mingw\\mingw64\\bin\\g++.exe",
- "cStandard": "c89",
- "cppStandard": "gnu++98",
- "intelliSenseMode": "windows-gcc-x64"
- }
- ],
- "version": 4
- }
2.2 配置launch.json文件:这是为了调试的配置
- {
- // 使用 IntelliSense 了解相关属性。
- // 悬停以查看现有属性的描述。
- // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
- "version": "0.2.0",
- "configurations": [
-
- {
- "name": "gdb 启动器", //随便
- "type": "cppdbg",
- "request": "launch",
- "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
- "args": [],
- "stopAtEntry": false,
- "cwd": "${workspaceFolder}",
- "environment": [],
- "externalConsole": false,
- "MIMode": "gdb",
- "miDebuggerPath": "D:\\Mingw\\mingw64\\bin\\gdb.exe",
- "preLaunchTask": "g++", // prelaunch作用是进行编译
- "setupCommands": [
- {
- "description": "为 gdb 启用整齐打印",
- "text": "-enable-pretty-printing",
- "ignoreFailures": true
- }
- ]
- }
2.3 配置task.json文件:
配置task文件的时候就会出现不同:因为vscode不像VS那样直接就对于工程文件编译,vscode需要在配置中加上链接,通知编译器文件的联系。
注意自己文件和文件夹的名称
第一种情况:只需要编译通过单个cpp文件,其他cpp文件不需要同时编译
- {
- // See https://go.microsoft.com/fwlink/?LinkId=733558
- // for the documentation about the tasks.json format
- "version": "2.0.0",
- "tasks": [
- {
- "type": "cppbuild", //任务类型
- "label": "g++", //任务名称,不建议改
- "command": "D:/Mingw/mingw64/bin/g++.exe", //C++和g++,c是gcc
- "args": [
- "-g",
- //"${workspaceFolder}\\ManagerSys.cpp",
- "${file}", //指定编译当前文件
- "-o",
- "${fileDirname}\\${fileBasenameNoExtension}.exe",
- ],
- "options": {
- "cwd": "D:\\Mingw\\mingw64\\bin\\"
- },
- "problemMatcher": [
- "$gcc"
- ],
- "group": {
- "kind": "test", //表示这一组任务的目标,可以换成build
- "isDefault": true
- },
- "detail": "D:/Mingw/mingw64/bin/g++.exe"
- }
- ]
- }
编译时只对目标文件调试即可。(绿色的小箭头开始编译)
第二种情况:需要编译通过所有cpp文件
此时task文件需要更改为:
- {
- // See https://go.microsoft.com/fwlink/?LinkId=733558
- // for the documentation about the tasks.json format
- "version": "2.0.0",
- "tasks": [
- {
- "type": "cppbuild",
- "label": "g++",
- "command": "D:/Mingw/mingw64/bin/g++.exe",
- "args": [
- "-g",
- "${workspaceFolder}\\*.cpp", //多文件一起编译
- "-o",
- "${fileDirname}\\${fileBasenameNoExtension}.exe",
- ],
- "options": {
- "cwd": "D:\\Mingw\\mingw64\\bin\\"
- },
- "problemMatcher": [
- "$gcc"
- ],
- "group": {
- "kind": "test",
- "isDefault": true
- },
- "detail": "D:/Mingw/mingw64/bin/g++.exe"
- }
- ]
- }
tasks.json文件中的args参数,实际上就是调用gcc时,后面所跟的参数在初始的配置中,实际上编译器执行的命令为gcc -g XXX.cpp -o XXX.exe,而修改后的配置中,执行的命令是gcc -g XXX.cpp XX.c -o XXX.exe,这是由于参数${file}代表的是被编译的当前文件,而参数${workspaceFolder}\\*.cpp代表的是当前目录下的所有.cpp文件
到此结束。
3、错误排除
出现“undefined reference”这种问题
两种可能:
1.点一下runCode的播放按钮,看看有没有产生exe文件
2.上面的文件配置是否正确,更改完重启vscode,开始调试。
如果是多文件同时编译,只需要点Main函数的调试步骤即可,头文件和类的声明不需要。
成功之后如图
3.虚构函数导致的内存溢出
出现的是undefined reference: classtest::~classtest,说明基类虚构函数不是虚函数,要加virtual;
或者直接注释掉虚构函数,最后再来调试.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。