赞
踩
生成可执行文件
# -g 表示生成带有可调试信息的文件
# -o 表示指定生成的文件名(缺省状态下为 a.exe)
g++ -g main.cpp -o my_single_swap
使用 -g 生成带有调试信息的可执行文件会比没有使用 -g 生成的可执行文大(包含调试信息)。
如果想运行该可执行文件,可以再终端输入文件名然后按下 tab (可以帮你补全),然后就可以看到运行结果了。
调试
首先点击运行和调试(一个三角和一个小虫子的标志),然后再点击创建 launch.json 文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/5536da55e27044c19fb7d7a92f310f09.png!
之后选择 C++(GDB/LLDB) 选项,因为我们使用 g++ 里的 GDB 这个调试器帮助我们调试。
之后系统会生成一个 launch.json 文件,之后可以点击添加配置。
之后会自动生成一些字段,里面主要需要修改的就是 program 和 miDebuggerPath,前者是可执行的位置,后者是 gdb 所在的位置。同时也可以注意一下字段 “cwd”,这是表明当前文件所在的工作目录。
配置完之后,就可以进行测试了,在代码处找到一个断点,然后就可以进行调试了。
生成可执行文件
直接按下 F5 键(一定点开要在需要编译的那个文件),也就是运行 -> 启动调试,之后选择调试器为 C++(GDB/LLDB)。
再选择 g++。
此时会生成两个文件,一个是 tasks.json 还有一个是以你刚刚想要编译的文件为名字的 .exe 的可执行文件。tasks.json 文件里是一些运行文件的配置。
而下方的终端会显示运行结果。
现在看一下 tasks.json 里的一些字段。首先是 label 字段,这个也就相当于 tasks 的名字(如果通过 tasks.json 来生成可执行文件的话,launch.json 中会有一个字段与 label 对应);command 字段是 gdb 所在的位置;args 就可以设置需要编译的文件,以及生成的可执行文件。
其实也可以发现 args 里的信息和之前再终端输入的信息非常像,其实也就是 tasks.json 帮助我们执行那句命令,并生成 main.exe 这个可执行文件。需要注意的是,tasks.json 的 label 和 launch.json 的 preLaunchTask 参数值需要保持一致。
调试
之后的步骤与方法一类似,唯一不同的是继续要在 launch.json 最后加上 preLaunchTask 字段以及他的值(tasks.json 的 label),表明这个 tasks.json 是再 launch.json 之前需要执行的,必须需要这个 tasks.json 生成带有调式信息的可执行文件 .exe 之后才能进行调试。
生成可执行文件
首先需要配置默认编译器,可以按下 ctrl+shift+p 组合按键打开命令面板,然后搜索 Configure Default Build Task。
选择使用 g++ 来生成。
然后就可以再资源管理器里看到,系统帮我们生成的 tasks.json 文件。
调试
接着继续配置调试相关的内容,按下 ctrl+shift+p 组合按键打开命令面板,然后搜索 Add Debug Configuration。
选择 g++。
然后就会生成 launch.json 文件,之后的操作就和之前的相同了。
可以在扩展中,搜索 Code Runner,并安装。
安装完成之后,就可以在 VS Code 的右上角看到。
安装了 Code Runner 插件后,操作就比较简单了。
g++ 编译多文件和编译单文件并没有太大的差别,只需要将所有的文件名都带上就可以了。
g++ -g main.cpp swap.cpp -o my_multi_swap
总的来说就是 tasks.json 生成了可执行文件,launch.json 指向了那个可执行文件,并进行调试。
CMake 可以帮助生成 MakeFile。MakeFile 可以指定编译规则,但是书写十分困难,CMake 可以用很少的代码生成复杂的 MakeFile。
首先我们需要在扩展中下载 CMake 和 CMake Tools 两个插件。
然后,需要我们选择一下编译器,可以按下 ctrl+shift+p 组合按键打开命令面板,然后搜索 CMake Configure。
然后我们编译器选择 GCC 8.1.0,选择自己版本就行。
配置成功后我们就可以在 VS Code 下方看到我们选择的 CMake。同时,他也帮我们建立了一个 build 文件夹。
如果需要更改的话,点击一下就可以更改了。
生成可执行文件
首先要在主目录里创建 CMakeLists.txt 文件。
在 CMakeLists.txt 中我们输入下面两行。
projecct(MYSWAP)
add_executable(my_cmake_swap, min.cpp, swap.cpp)
第一行指定我们这个项目的名字(指定为 MYSWAP),第二行生成 CMake 的可执行文件(第一个参数是生成可执行文件的名字,后面的参数是需要参与的文件名)。
然后我们在终端执行以下操作,来生成 CMake 的可执行文件。
首先进入到 build 文件夹下,然后执行 cmake ..
,这样我们就设置好了。最后输入 mingw32-make.exe
(Windows 下的 make 工具)。
调试
调试还是在 launch.json 中进行配置(需要注意的是要将可执行文件的位置写对)。
也可以手动创建 build 文件夹。
mkdir build
cd build
# 如果电脑上已安装了 VS,可能会调用微软 MSVC 编译器,使用(cmake -G "MinGW Makefiles" ..) 代替 (cmake ..) 即可
# 仅第一次使用 cmake 时使用(cmake -G "MinGW Makefiles" ..) 后面可使用 (cmake ..)
cmake ..
mingw64-make.exe
首先创建 build 文件夹,然后进入 build 文件夹(此时 build 文件夹是空的)。
进入 build 文件下后执行 cmake ..
。
在执行完 cmake ..
后,会发现和之前创建的 build 内容不太一样,这是因为电脑上已安装了 VS,会调用微软 MSVC 编译器。使用 cmake -G "MinGW Makefiles" ..
代替cmake ..
即可(仅第一次使用时需要)。需要把之前创建的 build 文件夹删掉重新弄一遍。
launch.json 主要就是绑定可执行文件的位置,设置一些调试时需要的东西。
命令行参数也就是 main 函数中 argv 里的东西,argc 是命令行参数的个数,argv 就是存放命令行参数的地方。如果有需要用到命令行参数的话,就需要放到 launch.json 中的 args 里。
由于每次 launch.json 调试的都是 .exe 可执行文件,也就是说如果你更改了代码,但是没有生成新的 .exe 文件,那么此时调试的文件还是之前没有改过的代码。所以每次调试之前都需要编译出新的 .exe 文件,但是有的时候(比如 CMake)生成 .exe 文件的步骤比较多,这时候就需要一个 tasks.json 来帮忙执行。
tasks.json 就是帮忙处理调试之前的编译工作。下面的 tasks.json 包含了 cmake、make 以及 build 三个 task。
由于我们需要执行最后一个 task,也就是 label 时 build 的 task,所以我们需要交 launch.json 的 preLaunchTask 字段改成 build。cmake 的 args 中的 “-DCMAKE_BUILD_TYPE=Debug” 是为了让程序调试的时候在断点处可以停下来,不加的话会无视断点。
变量名 | 含义 |
---|---|
${workspaceRoot} | 当前打开的文件夹的绝对路径+文件夹的名字 |
${workspaceRootFolderName} | 当前打开的文件夹的名字 |
${file} | 当前打开正在编辑的文件名,包括绝对路径,文件名,文件后缀名 |
${relativeFile} | 从当前打开的文件夹到当前打开的文件的路径如 当前打开的是test文件夹,当前的打开的是main.c,并有test/first/second/main.c那么此变量代表的是 first / second / main.c |
${fileBasename} | 当前打开的文件名+后缀名,不包括路径 |
${fileBasenameNoExtension} | 当前打开的文件的文件名,不包括路径和后缀名 |
${fileDirname} | 当前打开的文件所在的绝对路径,不包括文件名 |
${fileExtname} | 当前打开的文件的后缀名 |
${cwd} | 任务开始运行时的当前工作目录 |
${lineNumber} | 当前打开的文件,光标所在的行数 |
更详细的也可以参考官方文档。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。