FFmpeg,Fplay,clion调试环境搭建 - 弦外之音

/ 3评 / 0

本系列 以 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 的默认 targetall ,所以选择 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。

  1. 哈哈说道:

    我的clion工程为啥没显示target

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注