使用clion调试ffmpeg
作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音
虽然 gdb 轻量快捷,但毕竟它是一款命令行工具,如果想观察变量,内存,要敲很多命令,这样会打消新人的学习积极性。命令行是远没有 clion 的界面直观的。
clion 支持众多调试器,可以自定义使用哪款调试器的,例如 LLDB、WinDbg、GDB 等等。
默认情况,clion 就是调用 gdb 来实现界面化调试的,因为 gdb 本身是有API接口提供给外部使用的,所以界面化这个事情做起来会轻松一些。
如果想用 clion 调试 ffmpeg,需要先按照《Linux下编译FFmpeg》一文编译出来 ffmpeg,这个很重要的。因为只有执行完 configure,FFmpeg-n4.4.1 文件夹的 Makefile 项目才完整,也就是 ffbuild 目录下的 config.mak。必须要有这个文件,Makefile 的规则才完整。
然后才能把 Makefile 导入给 clion,然后 clion 才能分析 FFmpeg 项目里面的代码,函数之间的关联,才能在clion里使用各种高级功能,例如 Find Usages。
由于 clion 调试 ffmpeg 有点复杂,所以我在 B 站录了一个更加详细的 clion 调试视频。
视频地址:https://www.bilibili.com/video/BV1PV4y1Q7vo
喜欢看文字的读者可以继续阅读。
1,让 clion 加载 Makefile 项目
现在我们只需要用 clion 打开 FFmpeg-n4.4.1 文件夹,通常他会弹出一个窗口提示 Clean Project,如下:

我们需要点击 OK,这个 Clean Project 的效果其实就跟在命令行里执行 make clean 一样。所以 clion 会删掉你之前编译出来的 ffmpeg_g 等文件。
不过没关系,clion 执行完 Clean Project 之后,就会加载 Makefile 项目,我们等它加载完,然后再执行一次 make 命令就能重新编译出来 ffmpeg_g 了。
clion 在加载 Makefile,分析代码的时候,会在底部有 Update Symbol 相关的提示,这个过程会很快。
2,设置 clion 调试配置
当 clion 加载完 Makefile 之后,我们就能在右上角看到很多的 Configurations,如下:

这些 Configurations 其实就是 Makefile1 里面的 target,我们选择 all 这个 target 来设置调试命令与参数,如下:

3,点击小蟑螂开始调试
我们现在只需要打开 ffmpeg.c 代码文件,在 main 函数里打个断点,然后点击 clion 界面上的右上角的小蟑螂就可以开启调试了。效果如下:

其他的 ffplay 跟 ffprobe 也可以使用这种方法来调试,只需要修改一下 Configurations 的配置就行。
下面介绍一个我经常在 clion 里使用的功能,就是内存断点。前面说过 clion 是基于 gdb 实现的调试界面,所以打不过的 gdb 命令其实都可以在 clion 里面使用。
我们只需要切换到 gdb 的命令窗口,就能输入 gdb 的命令,如下:
watch *0x7fffffffde30

0x7fffffffde30 是变量 i 的内存地址,我监控这个地址,只要 i 的值发生变化,程序会停下来。这样我可以很方便找到哪行代码修改了 i 的内存数据,其他变量也可以用这个方式来监控。
这就是为什么这个调试方法会被叫做内存断点的原因。
1. Makefile 教程可以看陈皓的《跟我一起写Makefile》 ↩