编译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.bz2tar jxvf ffmpeg-\${VERSION}.tar.bz2VERSION设置为最新的ffmpeg版本号。    

至于用什么工具来关上这些源码文件,你应该思考适宜本人,而且适宜看大型项目的工具,比方sourceinsight、sublime、vim、emacs、xcode、Android Studio之类。

(1)编译FFmpeg

编译要应用到编译器,在mac机上最简略的方法就是装置xcode了,这样保障编译器clang是存在的。

为了调试,这次的编译能够很简略,只有把优化选项去掉,再make即可:

make clean./configure --disable-optimizationsmake 

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

对于configure的参数,你也能够通过./configure --help来查看所有的选项,而后再找到对于优化的选项。

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

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

胜利编译后,能够看这几个文件:

(2)用gdb调试FFmpeg

如果你喜爱用命令行,那应用gdb或lldb来进行调试是不错的抉择。

在应用gdb前,须要装置并给gdb签名,如果你还没有筹备好gdb,并且有趣味应用gdb的话,能够浏览分割线以内的内容,这外面也包含了gdb罕用的命令。


装置gdb:

brew install homebrew/dupes/gdb

对gdb受权,参照: https://blog.csdn.net/cairo12...

写一个测试的例子:

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,删除断点3disable 1 --禁用断点1enable 1 --启用断点1s --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来简略调试的演示视频:

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

(3)用xcode来调试FFmpeg

显然,应用gdb来调试,对于浏览代码或操作都不算太直观,这时,你能够思考用xcode来调试FFmpeg。

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

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

总结一下,本文介绍了如何在macos上调试FFmpeg的源码,包含应用gdb或xcode来调试的方法,同时也介绍了如何编译带有调试信息的FFmpeg。有缘再见,see you.