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

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

MySQL之复合查询使用及说明

《MySQL之复合查询使用及说明》文章讲解了SQL复合查询中emp、dept、salgrade三张表的使用,涵盖多表连接、自连接、子查询(单行/多行/多列)及合并查询(UNION/UNIONALL)等... 目录复合查询基本查询回顾多表查询笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from子句中使

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字