通过vscode在linux系统中调试c++程序(可以运行OpenCV程序)
程序员文章站
2022-04-02 23:01:34
...
1.在linux系统中安装opencv库
这一部分,由于我使用的服务器已经装好,所以不用重复安装。
可见https://blog.csdn.net/sandalphon4869/article/details/94398876
2.vscode配置
2.1 安装c/c++插件
2.2 编写lauch.json
**执行思路(了解就好):**首先执行preLaunchTask中的内容,也就是根据preLaunchTask的值找到task.json中的任务(即完成编译任务),然后指定gdb调试编译好的可执行文件。
做法(你需要做的):点击左侧的Debug按钮选择添加配置(Add configuration)或者直接按F5,然后选择C++(GDB/LLDB),然后选个Default,将自动生成launch.json文件.
修改成如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++-5 - 生成和调试活动文件",// 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg",// 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
"request": "launch",// 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}",// 将要进行调试的程序的路径
"args": [
//在这里可以添加参数,即./a.out args[1] args[2] ......
//eg
"-L",//args[1]
"datalist.txt",//args[2]
"-O",//args[3]
"output.txt"//args[4]
],
"stopAtEntry": false,// 设为true时程序将暂停在程序入口处,相当于在main上打断点
"cwd": "${fileDirname}",// 调试程序时的工作目录,此为文件所在目录;改成${workspaceFolder}可变为工作区文件夹
"environment": [],// 环境变量
"externalConsole": false,//如何你的linux是远程服务器,那设置成false,不然不能运行。我猜是因为远程服务器在本地调用不出外部窗口。
"MIMode": "gdb",//指定连接的调试器,可以为gdb或lldb。
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Compile",
"miDebuggerPath": "/usr/bin/gdb"//指定gdb的路径。可以在shell中whereis gdb查看路径。
}
]
}
2.3 配置tasks.json(有OpenCV配置信息)
做法: Ctrl+Shift+P,输入Edit,选择Task:Configure Default Build Task。
修改成如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",// process是把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍
"label": "Compile",
"command": "/usr/bin/g++-5",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"`pkg-config","--libs","--cflags","opencv`" //vscode里`pkg-config --cflags --libs opencv`会导致编译错误,需要拆开写
],
"problemMatcher":{
"owner":"cpp",
"fileLocation":[
"relative",
"${fileDirname}"
],
"pattern":[
{
"regexp": "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$",
"file": 1,
"location": 2,
"message": 3
}
]
},
//每次执行都启动一个新的控制台
"presentation": {
"reveal": "always",
"panel": "new",
"echo": true
},
"options": {
"cwd": "/usr/bin"
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
3.注意说明
- 当前很多教程都会配置c_cpp_properties.json文件,但是现在的版本(0.18.0之后)不需要创建这个文件了,cpptools会自动使用默认的设置。所以本文也不再包含此文件的配置。
- 一般只要修改task.json中g++部分即可。
如何查看g++路径?默认创建模板的时候会自带或者在linux命令行中输入:whereis g++
3.lauch.json中preLaunchTask的值要和task.json中label的值要相同。
参考网址
上一篇: 面试题-对vuex的理解
下一篇: 什么类型的城市