本文主要是介绍12-----关于调试SRS和follow-fork-mode,detach-on-fork的说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 follow-fork-mode,detach-on-fork
看下面的图表。
follow-fork-mode | detach-on-fork | 说明 |
---|---|---|
parent | on | 只调试主进程( GDB 默认) |
child | on | 只调试子进程 |
parent | off | 同时调试两个进程, gdb 跟主进程, 子进程 block 在 fork 位置 |
child | off | 同时调试两个进程, 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的说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!