赞
踩
本文参考【笔记】用VSCode调试C++代码的方法
并在此基础上修改一部分。
安装插件:C/C++,其作用是提供对接gdb的接口
1、打开源代码main.cpp,按 F5 ,然后选择第一项 C++ (GDB/LLDB)(图片来自参考)
2、然后选择 C/C++: g++.exe 生成和调试活动文件…(图片来自参考)
3、由于代码是分成多个文件,所以vscode不能直接处理,此时会报错(如果源文件只有一个main.cpp,那么这里就不会报错)。现在选择 打开"launch.json" ,并仍然选择 C++ (GDB/LLDB) ,你会发现生成了 .vscode ,并且这个文件夹下面有 launch.json 和 tasks.json 两个文件
打开 tasks.json,将 “args”: [ … ] 中的 " f i l e " , 注释掉,并在下面添加一行 ∗ ∗ " {file}", 注释掉,并在下面添加一行 **" file",注释掉,并在下面添加一行∗∗"{workspaceFolder}//*.cpp",表示编译的文件是源文件main.cpp所在文件夹下的所有.cpp文件
然后注意一下这个 “label” 标签的值 “C/C++: g++.exe 生成活动文件” ,它是编译源文件这个任务的名称,下一步会用到。
另外也可以看看下面的的两个参数 “-o”, 和 “{fileDirname}\{fileBasenameNoExtension}.exe” ,这表示编译生成的可执行文件的名字,生成的位置在工作空间的build文件夹下。因此将 “{fileDirname}\{fileBasenameNoExtension}.exe"改为”${workspaceFolder}/build/ExtendedKF",目的是指明可调试的可执行程序的位置。
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ 生成活动文件", "command": "/usr/bin/g++", "args": [ "-fdiagnostics-color=always", "-g", //"${file}", "${workspaceFolder}/**/*.cpp",//这一点是关键 "-o", //"${fileDirname}/${fileBasenameNoExtension}" "${workspaceFolder}/build/ExtendedKF" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务。" } ], "version": "2.0.0" }
打开 launch.json ,点击右下角的 添加配置 ,选择 C/C++: (gdb) 启动 。
在生成的代码中添加一行 “preLaunchTask”: “C/C++: g++.exe 生成活动文件”, ,这就是2中 tasks.json 那个 “label” 的值,“preLaunchTask” 代表预启动的任务,表示每次调试或运行之前就会先对源文件进行编译。
另外,你也可以选择不添加 “preLaunchTask”: “C/C++: g++.exe 生成活动文件”, ,这样的话,就需要运行程序前先对程序进行编译,编译的快捷键是 ctrl+shift+B ,然后才能 ctrl+F5 运行或 F5 调试。
在 launch.json 中,“program” 标签需要的参数是可执行文件的路径。在3.2中我们提到生成可执行文件的位置在工作空间的build文件夹下。因此,这里的 “program” 的值改为 “${workspaceFolder}/build/ExtendedKF”
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) 启动", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/ExtendedKF", "args": [ "/home/liu/tracking-with-Extended-Kalman-Filter/data/sample-laser-radar-measurement-data-1.txt", "/home/liu/tracking-with-Extended-Kalman-Filter/output/output.txt" ], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "将反汇编风格设置为 Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "C/C++: g++ 生成活动文件" } ] }
aunch.json 中的 “args”: [] 标签代表传递给程序的命令行参数,如果main()函数需要命令行参数,可以在这里添加。如上图所示,给main()函数传递了三个参数,分别为 “/home/liu/tracking-with-Extended-Kalman-Filter/data/sample-laser-radar-measurement-data-1.txt”,
“/home/liu/tracking-with-Extended-Kalman-Filter/output/output.txt”
至此,返回main.cpp,设置断点,F5就可以愉快地(bushi)调试代码了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。