Debugging工具
目标
- 如何获取更多的GStreamer调试信息(设置环境变量)。
- 如何将自己的调试信息打印到GStreamer日志中(重定向)。
- 如何获取管道图形(
GraphViz
)。
调试日志
介绍:GStreamer的调试日志非常详细,当完全启用时,可能会导致应用程序无响应(由于控制台滚动)或填满几百兆字节的文本文件(当重定向到文件时)。因此,日志被分类,很少需要同时启用所有类别。
第一个类别是调试级别(Debug Level),它是一个指定所需输出量的数字:
# | 名称 | 描述 |
---|---|---|
0 | none | 不输出任何调试信息。 |
1 | ERROR | 记录所有 fatal errors。这些是不允许core或element执行请求操作的错误。如果应用程序编程处理触发错误的条件,仍然可以恢复。 |
2 | WARNING | 记录所有warnings。通常这些不是致命的,但预计会出现用户可见的问题。 |
3 | FIXME | 记录所有“fixme”消息。这些通常是已知不完整的代码路径被触发的消息。它在大多数情况下可能发生,但可能在特定情况下导致问题。 |
4 | INFO | 记录所有信息性(informational)消息。这些通常用于系统中仅发生一次的事件,或者是重要且稀有到足以在此级别记录的事件。 |
5 | DEBUG | 记录所有调试(debug)消息。这些是发生在对象生命周期中有限次数的一般调试消息。这包括设置(setup)、拆卸(teardown)、更改参数等。 |
6 | LOG | 记录所有日志(log)消息。这些是在对象生命周期中重复发生的事件,包括流媒体和稳定状态的情况。这适用于每个元素中的每个缓冲区发生的日志消息。 |
7 | TRACE | 记录所有跟踪(trace)消息。这些是非常频繁发生的消息。例如,每当修改GstBuffer或GstEvent等GstMiniObject的引用计数时会生成trace消息。 |
9 | MEMDUMP | 记录所有内存转储消息。这是最重量级的日志记录,可能包括转储内存块的内容。 |
使用说明
- 要启用调试输出,将
GST_DEBUG
环境变量设置为所需的调试级别。低于该级别的所有级别也将显示(例如,如果您将GST_DEBUG
设置为2
,您将获得ERROR
和WARNING
消息)。 - 此外,每个GStreamer的插件或部分都定义了自己的类别,因此您可以为每个单独的类别指定调试级别。例如,
GST_DEBUG=2,audiotestsrc:6
,将为audiotestsrc
元素使用调试级别6
,对于其他所有元素使用级别2
。 - 因此,
GST_DEBUG
环境变量是一个以逗号分隔的类别列表:级别对的列表,其中级别是可选的,表示所有类别的默认调试级别。 - 还可以使用’'通配符。例如,
GST_DEBUG=2,audio:6
将为所有以音频开头的类别使用调试级别6
。GST_DEBUG=*:2
等效于GST_DEBUG=2
。 - 使用
gst-launch-1.0 --gst-debug-help
获取所有已注册类别的列表。请记住,每个插件都会注册自己的类别,因此,在安装或删除插件时,此列表可能会发生变化。 - 当GStreamer总线上发布的错误信息无法帮助您找出问题时,请使用
GST_DEBUG
。通常的做法是将输出日志重定向到文件,然后稍后检查它,搜索特定的消息。
图形化输出
步骤
- 当管道变得过于庞大且你无法跟踪其连接关系时,GStreamer提供了输出图形文件的功能。这些文件是
.dot
文件,可以用像GraphViz
这样的免费程序读取,描述了管道的拓扑结构以及每个链接中的caps negotiation
。 - 当使用
playbin
或uridecodebin
等一体化元素时,这也非常方便,因为它们在内部实例化了多个元素。使用.dot文件可以了解它们内部创建了什么样的管道(同时还能学习一些GStreamer的知识)。 - 要获取
.dot
文件,只需将GST_DEBUG_DUMP_DOT_DIR
环境变量设置为指向想要放置文件的文件夹。gst-launch-1.0
在每次状态变化时都会创建一个.dot
文件,这样您就可以看到caps negotiation
的演变过程。取消设置该变量即可禁用此功能。在应用程序内部,您可以使用GST_DEBUG_BIN_TO_DOT_FILE()
和GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()
宏根据需要生成.dot
文件。
函数与知识点
GST_DEBUG_CATEGORY_INIT()
功能:使用给定的属性初始化一个新的GstDebugCategory
,并设置为默认阈值。GST_DEBUG_BIN_TO_DOT_FILE()
功能:为了帮助调试应用程序,可以使用此方法将构成管道的整个GStreamer元素网络写入一个dot
文件中。可以使用graphviz
处理该文件,生成一个图像。GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()
功能:这个方法类似于GST_DEBUG_BIN_TO_DOT_FILE()
,但是在文件名中添加了当前的时间戳,以便可以用来拍摄多个快照。