通过vscode在linux系统中调试c++程序(可以运行OpenCV程序)

  • Post author:
  • Post category:linux

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.注意说明

  1. 当前很多教程都会配置c_cpp_properties.json文件,但是现在的版本(0.18.0之后)不需要创建这个文件了,cpptools会自动使用默认的设置。所以本文也不再包含此文件的配置。
  2. 一般只要修改task.json中g++部分即可。
    在这里插入图片描述

 如何查看g++路径?默认创建模板的时候会自带或者在linux命令行中输入:whereis g++
3.lauch.json中preLaunchTask的值要和task.json中label的值要相同。

参考网址

  1. https://www.zhihu.com/question/30315894
  2. https://blog.csdn.net/sandalphon4869/article/details/94398876

版权声明:本文为qq_40612314原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。