本系列 以 ffmpeg4.4 源码为准。本文主要讲解如何搭建 ffplay 的CLion调试环境。 ffmpeg 在 Linux 环境下更好调试。
本文系统是 Ubuntu 18,首先下载 FFmpeg-n4.4.1.zip ,虽然 FFmpeg 是通过 makefile 编译的,但是还是可以用 Clion
来调试,比 gdb 更直观一些。CLion 目前的最新版本比较完善,早几年我用的时候,调试好像必须提供 CMakeList 文件,现在只有 makefile 文件也能用 Clion 调试了。
操作步奏如下:
# 安装以下软件。
apt-get install diffutils make pkg-config yasm
apt-get install libsdl2-2.0
apt-get install libsdl2-dev
# 先执行 configure
./configure \
--prefix=/home/ubuntu/ffmpeg/build64/ffmepg-4.4-ubuntu \
--enable-gpl \
--enable-nonfree \
--enable-debug=3 \
--disable-optimizations \
--disable-asm \
--disable-stripping
这里有三个重点要注意:
1,要编译出 ffplay
可执行文件,必须安装 sdl2
库
2,上面的 configure
不要开启动态库,静态库调试会方便很多。ffmpeg 4.4 你不加 --enable-shared
就是使用静态库编译。configure
的规则是静态库动态库只能二选一。
3,后面有好几个选项是开启 debug 模式,告诉编译器不要优化代码,因为有时候优化代码,C程序的跳转看起来很奇怪。
现在打开 Clion,打开 FFmpeg 源码目录,再点击 Load Makefile Project 按钮。如下图:
稍等片刻,Clion 就能加载完成,就会出现 很多 makefile 的 target 可以选择,如下图:
之前的文章《ffmpeg-makefile编译分析》,讲过,makefile 的默认 target
是 all
,所以选择 all
就能编译出 ffplay
可执行文件。
makefile 可以有很多 target 的,也可以单独编译某个target。如果只需使用某个模块的动态库,就可以单独编译这个模块的target。
点击 上面的 Edit Configurations ,配置一些东西,如下图:
注意 Clion 的 Load Makefile Project 自动加的 是 Makefile Application,不是 Makefile target。所以需要你自己用命令行编译出 ffplay 可执行文件。使用 make -j 16
命令编译,即可产生 ffplay 可执行文件。然后把 ffplay 的路径填到 Clion的 Executable 那里就行了。
现在 在 ffplay.c 文件的 main() 入口打一个断点,如下图:
从上图可以看到,断点成功了,step into 跳进去 avformat_open_input()
等内部函数也可以顺利看到数据,如下图:
这样,使用Clion 大大降低了新人调试 理解 ffplay 逻辑的难度。再提一点,刚刚 make 编译出 ffpaly 的同时,可执行文件 ffmpeg 也编译出来了,所以同理,ffmpeg 也能这样断点调试。
由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,或者希望交流音视频技术的,可以加我微信 Loken1。
我的clion工程为啥没显示target
@哈哈 要用 ubuntu ,mac 可能有点问题,转个虚拟机ubuntu18。那个target 其实感觉是 clion 有点bug,添加 Make Application的时候可能你要随便加一个target,他才能显示出来。
@哈哈 没显示有时候是clion抽风了,要自己手动添加 make target 跟 make application