FFMPEG 调试

编译FFmpeg得到二进制文件,之后就是对二进制库的调用,这时FFmpeg就像一个黑盒子。作为程序员,难道不想研究一下FFmpeg的具体实现?比如是怎么拿到歌曲信息的、怎么解码的、怎么推流的,等等。

看源码是理解代码实现的一个办法,而单步调试能从另一个维度去帮到你。本文介绍如何单步调试FFmpeg的代码。

(一)为什么要调试

调试的好处,一来可以理解程序的执行流程,二来有助于定位问题。

相对于看源码,单步调试,可以看到数据的变化,会深刻很多,而且定位问题时也直观快速,读者甚至可以修改变量的值或下条件断点,充分发挥调试器的功能。

所以调试是理解代码与定位问题的有效办法。

(二)怎么调试

小程用的是mac机。先完成FFmpeg源码下载与编译的准备工作。

(0)下载FFmpeg源码

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
或者:
curl -0 http://ffmpeg.org/releases/ffmpeg-${VERSION}.tar.bz2
tar jxvf ffmpeg-${VERSION}.tar.bz2
VERSION设置为最新的ffmpeg版本号。

至于用什么工具来打开这些源码文件,读者应该考虑适合自己,而且适合看大型项目的工具,比如sourceinsight、sublime、vim、emacs、xcode、Android Studio之类。

(1)编译FFmpeg

编译要使用到编译器,在mac机上最简单的办法就是安装xcode了,这样保证编译器clang是存在的。

为了调试,这次的编译可以很简单,只要把优化选项去掉,再make即可:

make clean
./configure --disable-optimizations
make

configure是FFmpeg提供的配置脚本,用来生成Makefile跟config.h文件,Makefile在编译时使用,而config.h(里面各种宏的定义)被FFmpeg源码使用,也会影响到FFmpeg的功能裁剪。

对于configure的参数,读者也可以通过./configure --help来查看所有的选项,然后再找到关于优化的选项。

这里的make clean,是为了清一下之前的编译污染,如果之前没有编译过,那就不需要执行。

另外,如果make之后,再执行make install,就会把FFmpeg安装到mac系统。对于调试来说这个是不必要的,只要make出二进制库就好了。

成功编译后,可以看这几个文件:
FFmpeg带调试信息的程序

(2)用gdb调试FFmpeg

对于喜欢用命令行的读者,使用gdb或lldb来进行调试是不错的选择。

在使用gdb前,需要安装并给gdb签名,如果读者还没有准备好gdb,并且有兴趣使用gdb的话,可以阅读分割线以内的内容,这里面也包括了gdb常用的命令。


安装gdb:

brew install homebrew/dupes/gdb

对gdb授权,参照:https://blog.csdn.net/cairo123/article/details/52054280

写一个测试的例子:

touch gdbtest.c:
int main() {
int a = 10;
printf("%d\n");
}

编译:

gcc -o gdbtest gdbtest.c -g

注意须带-g,以生成符号dSYM文件。

然后就可以调试了,常用命令有这些:

gdb gdbtest --加载可执行程序
r --run,运行,可以带参数
i b --info break,断点信息
b 3 --break 3,第3行下断点
b main --main函数第一行下断点
b other_c:fun1 --文件other_c的fun1函数第一行下断点
b 120 --在120行下断点
clear --删除所有断点
d 3 --delete 3,删除断点3
disable 1 --禁用断点1
enable 1 --启用断点1
s --step,跳进去
f --finish,跳出来
n --next,执行一行
n 3 --next 3,执行3行
c --continue,继续直至下一个断点或结束
p a --print a,输出变量a的值
list/l --查看代码
q/kill --退出本次调试
bt --查看调用堆栈
return --把当前函数return


为了便利,小程直接用FFmpeg的程序来切入调试(当然也可以写自己的代码来调用FFmpeg),比如可以选择ffplay_g这个程序来切入,调试它所依赖的基础即FFmpeg。

调试ffplay_g需要输入参数,在gdb ffplay_g后,r "xxx/file.mp3"即可,表示用ffplay_g来播放这个文件。

以下是小程使用gdb来简单调试的演示视频:

gdb调试FFmpeg

需要留意,带_g的是带有调试信息的程序,那是调试需要的。

(3)用xcode来调试FFmpeg

显然,使用gdb来调试,对于阅读代码或操作都不算太直观,这时,读者可以考虑用xcode来调试FFmpeg。

小程这里不介绍每个配置环节了,因为,读者可以参考以下这一篇图文并茂的文章,按步操作就可以了:
http://www.jianshu.com/p/226c19aa6e42

至此,已经介绍完怎么调试FFmpeg。


总结一下,本文介绍了如何在macos上调试FFmpeg的源码,包括使用gdb或xcode来调试的办法,同时也介绍了如何编译带有调试信息的FFmpeg。


做人最紧要开心

分类: 多媒体

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值