srs.py调试脚本介绍—SRS对StateThreads的改进与完善

前面《如何查看协程相关信息》,已经介绍了如何查看协程数量,遍历协程,通过 EBP 寄存器去查看协程的函数调用层级。不过这样手敲命令,还是比较麻烦。有没一种更自动化一点的方法呢?

答:有,就是 srs.py 脚本,这是一个 python 写的脚本,主要是调 GDB 的 API 完成一些功能,所以这个脚本只能在 GDB 窗口里运行,千万不要用 python 命令直接运行这个脚本,没用的。

我们把 srs.py 脚本下载下来,然后放到 st-1.9 目录里,如下:

然后我们就能在 clion 的 GDB 窗口用 source 命令导入这个 srs.py 脚本,如下:

bash 复制代码
source srs.py

srs.py 脚本 导入之后,就给 gdb 创建了两个新的命令,nn_coroutinesshow_coroutines

1,nn_coroutines 打印协程的地址以及总数量

nn_coroutines 命令是打印协程的地址以及总数量,因为协程可能很多,所以默认是相隔 1000 条才打印一次 协程地址,所以如果你有 2000 个协程,他默认只会打印第 1 个,第 1000 个,第 2000 个 协程的地址。

如果你希望全部打印,可以给 nn_coroutines 传参数 1,这个参数如果不传,默认是 1000

复制代码
nn_coroutines 1

其实他这里打印的不是 协程本身的地址,而是里面的 tlink 字段的地址。你可以用《如何查看协程相关信息》介绍的方法,修改 srs.py,用偏移获取到 协程的地址再打印。


2,show_coroutines 显示协程的函数调用

show_coroutines 命令只显示了倒数第二层的函数调用,如下:

这个命令我觉得还可以继续优化一下,因为大部分的协程,他肯定是阻塞在切换协程哪里的函数的,所以看起来几乎是一样的,通过地址看不出来这是什么协程。

我个人觉得最好显示倒数 3 层的函数出来,会更容易阅读一些。读者可以自行修改 srs.py 来实现这个功能。


参考资料:

1,github.com/ossrs/state...


本文是《 SRS原理 》一书中的文章,如需观看更多内容,请购买本书。

相关推荐
Tiny_React2 小时前
使用 Claude Code Skills 模拟的视频生成流程
人工智能·音视频开发·vibecoding
hk11249 天前
【音视频/边缘计算】2025年度H.265/HEVC高并发解码与画质修复(Super-Resolution)基准测试报告(含沙丘/失控玩家核心样本)
ffmpeg·边缘计算·音视频开发·h.265·测试数据集
李小轰_Rex19 天前
把手机变成听诊器!摄像头 30 秒隔空测心率 - 开箱即用
android·音视频开发
李小轰_Rex20 天前
纯算法AEC:播录并行场景的回声消除实战笔记
android·音视频开发
否子戈21 天前
WebCut前端视频编辑UI框架一周开源进度
前端·音视频开发·ui kit
SHERlocked9324 天前
摄像头 RTSP 流视频多路实时监控解决方案实践
c++·后端·音视频开发
mortimer1 个月前
Python + FFmpeg 视频自动化处理指南:从硬件加速到精确剪辑
python·ffmpeg·音视频开发
否子戈1 个月前
做中国人自己的视频编辑UI框架,WebCut正式开源
前端框架·音视频开发·视频编码
音视频牛哥1 个月前
从低延迟到高可用:RTMP与 HTTP/HTTPS-FLV在App播放体系中的角色重构
人工智能·音视频·音视频开发·http-flv播放器·https-flv播放器·ws-flv播放器·wss-flv播放器
音视频牛哥1 个月前
轻量级RTSP服务的工程化设计与应用:从移动端到边缘设备的实时媒体架构
人工智能·计算机视觉·音视频·音视频开发·rtsp播放器·安卓rtsp服务器·安卓实现ipc功能