广告位联系
返回顶部
分享到

vscode调试gstreamer源码的流程介绍

C语言 来源:互联网 作者:佚名 发布时间:2023-01-06 20:57:52 人浏览
摘要

1. 安装vscode插件 C/C++ C/C++ Extension 2. 配置文件修改 vscode中每个项目都有一套配置文件集合,位于.vscode目录下,其中有: tasks.json:编译的相关配置 launch.json:debug的相关配置 c_cpp_proper

1. 安装vscode插件

  • C/C++
  • C/C++ Extension

2. 配置文件修改

vscode中每个项目都有一套配置文件集合,位于.vscode目录下,其中有:

  • tasks.json:编译的相关配置
  • launch.json:debug的相关配置
  • c_cpp_properties.json:c/c++程序相关配置

2.1 自定义c_cpp_properties.json

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

{

    "configurations": [

        {

                "name": "Linux", # 配置标识符 linux, mac, win32

            "includePath": [

                    "${workspaceFolder}/**" #头文件搜索路径

                    # **:表示递归搜索

            ],

            "defines": [],

                "compilerPath": "/usr/bin/gcc", # 编译器路径

            "cStandard": "gnu11",               # c语言的标准版本

            "cppStandard": "gnu++14",           # c++语言的标准版本

            "intelliSenseMode": "linux-gcc-x64"

        }

    ],

    "version": 4

}

2.2 自定义tasks.json文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

{

    "tasks": [

        {

            "type": "shell",

            "label": "test",

            "command": "make",

            // "args": [

            //     "-fdiagnostics-color=always",

            //     "-g",

            //     "${file}",

            //     "-o",

            //     "${fileDirname}/${fileBasenameNoExtension}"

            // ],

            // "options": {

            //     "cwd": "${fileDirname}"

            // },

            // "problemMatcher": [

            //     "$gcc"

            // ],

            "group": {

                "kind": "build",

                "isDefault": true

            },

            "detail": "调试器生成的任务。"

        }

    ],

    "version": "2.0.0"

}

其他参数含义:

  • workspaceFolder:打开的vscode目录
  • workspaceFolderBasename:workspaceFolder的根目录
  • fileDirname: 当前VsCode打开文件的目录
  • fileBasenameNoExtension:file里每个文件不带后缀

2.3 Debug

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

{

    // 使用 IntelliSense 了解相关属性。

    // 悬停以查看现有属性的描述。

    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387

    "version": "0.2.0",

    "configurations": [

        {

            "name": "test",

            "type": "cppdbg",

            // debug的模式,分为launch和attach两种

            "request": "launch",

            // 程序可执行文件的完整路径

            "program": "${workspaceFolder}/deepstream-test-rt-src-add-del",

            // 传递给程序的命令行参数

            "args": ["file:///opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_720p.h264"],

            // 可选参数。如果为 true,则调试程序应在目标的入口点处停止

            "stopAtEntry": false,

            // 目标的工作目录

            "cwd": "${workspaceFolder}",

            // 要添加到程序环境的环境变量

            "environment": [],

            "externalConsole": false,

            // 指示 MIDebugEngine 要连接到的控制台调试程序。允许的值为 "gdb"、"lldb"。

            "MIMode": "gdb",

             

            "setupCommands": [

                {

                "description": "Enable pretty-printing for gdb",

                "text": "-enable-pretty-printing",

                "ignoreFailures": true

                }

            ],

            // 调试会话开始前要运行的任务

            "preLaunchTask": "test",

            // MI 调试程序(如 gdb)的路径。如果未指定,将首先在路径中搜索调试程序

            "miDebuggerPath": "/usr/bin/gdb"

        }

    ]

}

3. Makefile环境下

使用 -g 来启动调试环境

4. Python调试

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

{

  // 使用 IntelliSense 了解相关属性。

  // 悬停以查看现有属性的描述。

  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387

  "version": "0.2.0",

  "configurations": [

    {

      "name": "test",

      "type": "python",

      "request": "launch",

      "program": "${workspaceRoot}/tools/inference.py",

      "args": ["--config", "anomalib/models/padim/config.yaml", "--weight_path", "results/padim/mvtec/test7/weights/model.ckpt",

        "--image_path", "datasets/MVTec/test7/train/good/", "--save_path", "results/padim/mvtec/test7/train_data"],

      "console": "integratedTerminal",

      "cwd":"${workspaceRoot}",

      "justMyCode": true

    }

  ]

}

5. 调试gstreamer源码

GStreamer 是用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发.

下载gstreamer源码

使用gst-inspect1.0工具可以获取gstreamer中element的信息,以multifilesrc element为例,输入如下命令:

1

gst-inspect-1.0 multifilesrc

即可输出下图的信息,找到源码下载地址。

在这里插入图片描述

选择如下版本

在这里插入图片描述

下载源码,解压

在这里插入图片描述

编译源码

编译源码可以参考如下文章【编译gstreamer插件-multifilesrc】

修改Makefile

搜索-g选项信息

在这里插入图片描述

将-O2选项修改未-O0

在这里插入图片描述

重新编译得到动态库

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

root@2a2466b40131:~/homework/gst_plugin_good/gst/multifile# make

CC       test_splitmux_part_reader-test-splitmuxpartreader.o

CC       test_splitmux_part_reader-gstsplitmuxpartreader.o

CC       test_splitmux_part_reader-gstsplitmuxsrc.o

CC       test_splitmux_part_reader-gstsplitutils.o

CC       test_splitmux_part_reader-patternspec.o

CCLD     test-splitmux-part-reader

CC       libgstmultifile_la-gstmultifilesink.lo

CC       libgstmultifile_la-gstmultifilesrc.lo

CC       libgstmultifile_la-gstmultifile.lo

CC       libgstmultifile_la-gstsplitfilesrc.lo

CC       libgstmultifile_la-gstsplitmuxsink.lo

CC       libgstmultifile_la-gstsplitmuxpartreader.lo

CC       libgstmultifile_la-gstsplitmuxsrc.lo

CC       libgstmultifile_la-gstsplitutils.lo

CC       libgstmultifile_la-patternspec.lo

CCLD     libgstmultifile.la

4.将动态库拷贝到系统路径下

1

2

make install

cp /root/homework/gst_plugin_good/bin/lib/gstreamer-1.0/libgstmultifile.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/

修改launch.json文件内容

launch.json文件内容重点需要修改如下三个参数:

在这里插入图片描述

整个launch.json文件内容如下,具体测试的pipeline如下:

1

gst-launch-1.0 multifilesrc location=test%d.jpg ! jpegparse ! jpegdec ! videoconvert ! jpegenc ! multifilesink location=output%d.jpg

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

{

  // 使用 IntelliSense 了解相关属性。

  // 悬停以查看现有属性的描述。

  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387

  "version": "0.2.0",

  "configurations": [

    {

      "name": "test",

      "type": "cppdbg",

      // debug的模式,分为launch和attach两种

      "request": "launch",

      // 程序可执行文件的完整路径

      "program": "/usr/bin/gst-launch-1.0",

      // 传递给程序的命令行参数

      "args":["multifilesrc", "location=test%d.jpg", "!", "jpegparse", "!", "jpegdec", "!", "videoconvert", "!", "jpegenc", "!", "multifilesink", "location=output%d.jpg"],

      // 可选参数。如果为 true,则调试程序应在目标的入口点处停止

      "stopAtEntry": false,

      // 目标的工作目录

      "cwd": "${workspaceFolder}/data",

      // 要添加到程序环境的环境变量

      "environment": [],

      "externalConsole": false,

      // 指示 MIDebugEngine 要连接到的控制台调试程序。允许的值为 "gdb"、"lldb"。

      "MIMode": "gdb",

 

      "setupCommands": [

        {

          "description": "Enable pretty-printing for gdb",

          "text": "-enable-pretty-printing",

          "ignoreFailures": true

        }

      ],

      // 调试会话开始前要运行的任务

      // "preLaunchTask": "test",

      // MI 调试程序(如 gdb)的路径。如果未指定,将首先在路径中搜索调试程序

      "miDebuggerPath": "/usr/bin/gdb"

    }

  ]

}

输入断点

在如下gst_multi_file_src_set_location函数中打上断点,按F5启动调试,即可进行调试

在这里插入图片描述

总结

在本文中,主要介绍了如何使用vscode调试C++和python程序,并进一步分析了如何调试gstreamer源码,讲述了如何调试gstreamer源码的具体流程。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/hello_dear_you/article/details/128540033
相关文章
  • C++ system()函数的常用用法(全网最新大全)
    一.推荐: 1. system(pause) 这是萌新最常用的函数了,运行后会有个暂停的效果,在制作游戏的时候也很常见 通常用于暂停或等待用户了解完信
  • vscode调试gstreamer源码的流程介绍

    vscode调试gstreamer源码的流程介绍
    1. 安装vscode插件 C/C++ C/C++ Extension 2. 配置文件修改 vscode中每个项目都有一套配置文件集合,位于.vscode目录下,其中有: tasks.json:编译的相
  • 基于Qt实现电子木鱼小游戏的方法
    今年最火爆的解压小游戏电子木鱼,现在许多软件都上架了这个小程序。我在网上看了一下基本上都是用py和Java写的,所以我用QT重新写了一
  • C++小游戏教程之猜数游戏的实现

    C++小游戏教程之猜数游戏的实现
    0. 引言 本章主要讲解如何做一个简易的猜数游戏,分为用户猜数和系统猜数。 前置芝士: 「C++小游戏教程」基本技巧(1)随机化 1. 用户猜数
  • C++AVL树4种旋转详讲(左单旋、右单旋、左右双旋、

    C++AVL树4种旋转详讲(左单旋、右单旋、左右双旋、
    引子:AVL树是因为什么出现的? 二叉搜索树可以缩短查找的效率,如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在
  • C++11成员函数作为回调函数的使用方式
    C++11成员函数作为回调函数使用 std::bind()被广泛地应用在新式的回调函数中。 C++11以前类的普通成员函数不能作为回调函数去注册,因为将普
  • C++11, 14, 17对tuple元素的访问介绍
    C++11, 14, 17对tuple元素的访问 std::tuple 作为可以存放任意个数,任意类型的元祖被我个人经常使用。 记得以前看侯捷谈到这个数据结构的时候
  • C++使用easyX库实现三星环绕效果流程介绍

    C++使用easyX库实现三星环绕效果流程介绍
    功能1:使用图形化的方式描述地球围绕着太阳转动,月球围绕着地球转动 功能2:在转动的过程中当用户按下1,2,3,4,5,6,7时它可以变换出7种不
  • C++时间函数整理介绍
    一、 时间概念 格林威治时间GMT(Greenwich Mean Time) 格林威治皇家天文台为了海上霸权的扩张计划,在十七世纪就开始进行天体观测。为了天
  • C++中类的六大默认成员函数的介绍

    C++中类的六大默认成员函数的介绍
    一、类的默认成员函数 二、构造函数Date(形参列表) 构造函数主要完成初始化对象,相当于C语言阶段写的Init函数。 默认构造函数:无参的构
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计