12-----关于调试SRS和follow-fork-mode,detach-on-fork的说明

2024-03-01 16:50

本文主要是介绍12-----关于调试SRS和follow-fork-mode,detach-on-fork的说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 follow-fork-mode,detach-on-fork

看下面的图表。

follow-fork-modedetach-on-fork说明
parenton只调试主进程( GDB 默认)
childon只调试子进程
parentoff同时调试两个进程, gdb 跟主进程, 子进程 block 在 fork 位置
childoff同时调试两个进程, gdb 跟子进程, 主进程 block 在 fork 位置

2 查看一下进程和线程的信息

//1 查看一下进程和线程的信息
info inferiors;
info threads;//2 或者切换进程和线程的信息
inferior <infer number>;
thread <thread number>;//3 查看对应的模式
show follow-fork-mode
show detach-on-fork

3 以调试SRS为例

下面我们以调试SRS为例。注意,调试SRS时,必须将配置默认的守护进程模式关掉,否则会出现deatch xxx种问题,导致无法调试。
在这里插入图片描述

1)gdb ./objs/srs
2)set args -c conf/srs.conf					//gdb时好像必须这样设置配置,否则出错
3)set follow-fork-mode child					//设置默认跟踪子进程,因为我看SRS源码最终使用子进程处理逻辑
4)set detach-on-fork off						//看上面,即开启调试多个进程,并且主进程 block 在 fork 位置
5)  b main
6)b SrsConfig::get_vhost_http_remux_enabled	//这里是SRS读取配置的关键,断点打这样方便观察读配置初始化的流程,SrsConfig::get_vhost_http_remux_enabled可以通过srs.conf的配置节点名搜索找到

在这里插入图片描述

然后按下r运行,方便观察进程和线程的信息。下图可以看到,目前进行和线程各自只有一个,两个模式就是我们刚刚设置的。
在这里插入图片描述

给大家看一下最终的堆栈结果。
在这里插入图片描述

若想继续调试,大家需要自行推流测试。下面简单列出一个推流命令。

ffmpeg -re -rtsp_transport tcp -an -i "rtsp://admin:admin@192.168.1.116/Streaming/Channels/1" 
-vcodec copy -an -f flv "rtmp://127.0.0.1/live/test"

这篇关于12-----关于调试SRS和follow-fork-mode,detach-on-fork的说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/763136

相关文章

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的