vscode调试gstreamer源码的详细流程

目录
  • 1. 安装vscode插件
  • 2. 配置文件修改
    • 2.1 自定义c_cpp_properties.json
    • 2.2 自定义tasks.json文件
    • 2.3 Debug
  • 3. Makefile环境下
  • 4. Python调试
  • 5. 调试gstreamer源码
    • 下载gstreamer源码
    • 编译源码
    • 修改Makefile
    • 输入断点
  • 总结

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

{
    "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文件

{
    "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

{
    // 使用 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调试

{
  // 使用 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工具可以获取gstreamerelement的信息,以multifilesrc element为例,输入如下命令:

gst-inspect-1.0 multifilesrc

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

选择如下版本

下载源码,解压

编译源码

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

修改Makefile

搜索-g选项信息

-O2选项修改未-O0

重新编译得到动态库

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.将动态库拷贝到系统路径下

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如下:

gst-launch-1.0 multifilesrc location=test%d.jpg ! jpegparse ! jpegdec ! videoconvert ! jpegenc ! multifilesink location=output%d.jpg
{
  // 使用 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源码的具体流程。

到此这篇关于vscode调试gstreamer源码的文章就介绍到这了,更多相关vscode调试gstreamer内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Gstreamer基础知识教程

    目录 一.Gstreamer整体框架 二.Gstreamer基础概念 由于deepstream是基于gstreamer的,所以要想在deepstream上做拓展,需要对gstreamer有一定的认识.以下主要介绍Gstreamer整体框架和Gstreamer基础概念. 一.Gstreamer整体框架 gstreamer是一个用于开发流式多媒体应用的开源框架.本身这个框架是为了更好的处理音视频而设计开发的,但gstreamer不限于处理音视频,只要是有明显的数据流特征的应用,gstreamer都能

  • C语言多媒体框架GStreamer入门和概述

    目录 一.概述 二.Gstreamer 的特点: 三.Gstreamer源码下载地址: 四.Gstreamer二进制发布库: 五.Gstreamer命令行显示 一.概述 在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备).这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库 二.Gstreamer 的特点: gstreamer跟ffmpeg一样,也是一个媒体框架,可以实现采集

  • python gstreamer实现视频快进/快退/循环播放功能

    Gstreamer到底是个啥? GStreamer 是一个 基于pipeline的多媒体框架,基于GObject,以C语言写成. 应用GStreamer这个这个多媒体框架,你可以写出任意一种流媒体的应用来如:meidaplayer.音视频编辑器.VOIP.流媒体服务器.音视频编码等等. 关于视频快进/快退/循环播放的知识总结: 1.本地视频时长获取: Gst.Pad.query_duration官方函数介绍: def Gst.Pad.query_duration (self, format):

  • vscode调试gstreamer源码的详细流程

    目录 1. 安装vscode插件 2. 配置文件修改 2.1 自定义c_cpp_properties.json 2.2 自定义tasks.json文件 2.3 Debug 3. Makefile环境下 4. Python调试 5. 调试gstreamer源码 下载gstreamer源码 编译源码 修改Makefile 输入断点 总结 1. 安装vscode插件 C/C++ C/C++ Extension 2. 配置文件修改 vscode中每个项目都有一套配置文件集合,位于.vscode目录下,其

  • C语言多媒体框架GStreamer使用教程深讲

    目录 1.GStreamer简介 2.GStreamer基本概念 2.1.元件(Element) 2.2.箱柜(Bin) 2.3.管道(Pipeline) 2.4.衬垫(Pad) 2.5.能力集(Caps) 2.6.幽灵pad(ghost pad) 2.7.Bus 2.8.缓冲区(Buffer) 2.9.插件(Plugin) 3.GStreamer基本架构 4.GStreamer通信机制 4.1.Message 4.2.Event 4.3.Signal 4.4.Probe 4.5.Quary 5

  • Windows环境IDEA下Ranger1.2.0源码编译详细流程

    目录 一.本地环境准备 二.源码编译 三.使用idea打开项目 1. 安装数据库Mysql版 2. 配置Tomcat,发布 security-admin-web项目. 3. 修改security-admin中以下文件 4. 编译启动Tomcat即可. 四.遇到问题 Apache Ranger是什么,它是一个为Hadoop平台提供了全面的数据安全访问控制及监控的集中式管理框架,Apache顶级项目.不废话了,其实本篇没那么高大上,就是一步步教你Windows环境IDEA下Ranger1.2.0源码

  • VSCode 搭建 x264 源码调试环境的详细步骤

    目录 1.下载 x264 2. 使用上一节介绍的方法为 x264 生成支持 debug 的 x264.exe 3. 在 VSCode 中打开 x264 源码文件夹 4. 创建并配置 launch.json 4.1 创建 launch.json 4.2 配置 launch.json 的 gdb.exe 路径 4.3 配置 launch.json 的 x264.exe 路径 5. 创建并配置 tasks.json 5.1 创建 tasks.json 5.2 配置 tasks.json 的 gcc.e

  • Android用于加载xml的LayoutInflater源码超详细分析

    1.在view的加载和绘制流程中:文章链接 我们知道,定义在layout.xml布局中的view是通过LayoutInflate加载并解析成Java中对应的View对象的.那么具体的解析过程是哪样的. 先看onCreate方法,如果我们的Activity是继承自AppCompactActivity.android是通过getDelegate返回的对象setContentView,这个mDelegate 是AppCompatDelegateImpl的实例. @Override protected

  • 使用Idea调试RocketMQ源码教程

    目录 前言 下载源码 代码编译 运行namesrv 启动 启动broker 配置文件 启动broker 小结 前言 为了更好地了解RocketMQ,我打算看一看它的源码了.随着RocketMQ5.0版本的发布,应该有更多小伙伴在实际应用中选择RocketMQ.那么我们就从这一篇文章开始,逐步来了解RocketMQ的神秘源码吧!接下来我们先把调试环境搭建好. 下载源码 源码地址:github.com/apache/rock… 我们先把RocketMQ源码下载下来,为了方便一点,建议小伙伴先fork

  • React源码state计算流程和优先级实例解析

    目录 setState执行之后会发生什么 根据组件实例获取其 Fiber 节点 创建update对象 将Update对象关联到Fiber节点的updateQueue属性 发起调度 processUpdateQueue做了什么 变量解释 构造本轮更新的 updateQueue 更新 workInProgress 节点 总结 update对象丢失问题 为什么会丢失 如何解决 state计算的连续性 问题现象 如何解决 setState执行之后会发生什么 setState 执行之后,会执行一个叫 en

  • 解决调试JDK源码时,不能查看变量的值问题

    前几天本来想以debug模式看一下JDK的源码,进入调试模式时才发现,根本看不到方法里面变量值的情况.为什么呢?JDK现在的版本中,编译过后,去除了里面的调试信息.解决办法是,编译那些类,使其带有调试信息,使用命令:javac -g 查看了一些相关资料,现将解决方法放到下面 1.在d:\的根目录下创建jdk7_src和jdk_debug目录. 2.在JDK_HOME目录下找到src.zip文件,并把它里面的文件解压到jdk7_src目录下,然后在解压后的目录中删除除了java.javax.org

  • Ubantu16.04进行Android 8.0源码编译的流程

    分为4个流程 源码下载 构建编译环境 编译源码 运行 源码下载 安装git并且配置 //安装git sudo apt-get install git //配置git名称和邮箱 git config --global user.name "your name" git config --global user.email XXX@XXX.com 创建repo的bin目录和源码目录 1.创建repo的bin目录 midir ~/bin 2.创建源码目录 midir ~/source 安装r

  • 细说webpack源码之compile流程-rules参数处理技巧(1)

    上篇文章给大家介绍了细说webpack源码之compile流程-rules参数处理技巧(2), 细说webpack源码之compile流程-入口函数run 大家可以点击查看. Tips:写到这里,需要对当初的规则进行修改.在必要的地方,会在webpack.config.js中设置特殊的参数来跑源码,例如本例会使用module:{rules:[...]}来测试,基本上测试参数均取自于vue脚手架(太复杂的删掉). 下面两节的主要流程图如下: 在进入compile方法后,迎面而来的就是这么一行代码:

  • 细说webpack源码之compile流程-入口函数run

    Webpack是目前基于React和Redux开发的应用的主要打包工具.我想使用Angular 2或其他框架开发的应用也有很多在使用Webpack. 本节流程如图: 现在正式进入打包流程,起步方法为run: Compiler.prototype.run = (callback) => { const startTime = Date.now(); const onCompiled = (err, compilation) => { /**/ }; this.applyPluginsAsync(

随机推荐