使用Xcode断点调试ffmpeg

参考原文整理

ffmpeg-xcode

ffmpeg xcode project

build steps

step 1 下载ffmpeg源码

step 2 编译 ffmpeg

  • cd FFmpeg
  • ./configure --enable-debug=trace | ./configure --enable-debug | ./configure --enable-debug=3
  • make -j8

make -j1 一个CPU编译

make -j2 二个CPU编译

问题1

1
编译时报错 yasm/nasm not found or too old. Use --disable-yasm for a crippled build. (yasm是汇编编译器, 因为ffmpeg中为了提高效率用到了汇编指令, 比如MMX和SSE)
解决方法
1
brew install yasm

问题2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 ~/github/FFmpeg # make -j8
CC libavdevice/alldevices.o
CC libavdevice/avdevice.o
CC libavdevice/lavfi.o
OBJCC libavdevice/avfoundation.o
CC libavdevice/utils.o
CC libavfilter/aeval.o
CC libavfilter/af_acontrast.o
CC libavfilter/af_acopy.o
clang: error: unknown argument: '-gtrace'
clang: error: unknown argument: '-gtrace'
clang: error: unknown argument: '-gtrace'clangclang:
: errorerror: : unknown argument: '-gtrace'unknown argument: '-gtrace'

clang: error: unknown argument: '-gtrace'
clang: error: unknown argument: '-gtrace'
make: *** [libavdevice/avfoundation.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [libavfilter/af_acontrast.o] Error 1
make: *** [libavdevice/avdevice.o] Error 1
make: *** [libavdevice/alldevices.o] Error 1
make: *** [libavdevice/utils.o] Error 1
make: *** [libavfilter/af_acopy.o] Error 1
make: *** [libavfilter/aeval.o] Error 1
clang: error: unknown argument: '-gtrace'
make: *** [libavdevice/lavfi.o] Error 1
解决方法

./configure --enable-debug

问题4

Segfault on macOS 10.15 “Catalina”

1
2
$ ffmpeg 
Segmentation fault: 11
1
2
$ ./ffmpeg
[1] 3439 segmentation fault ./ffmpeg
解决方法

./configure —extra-cflags=”-fno-stack-check”

step 3 新建一个空的 xcode 项目

  • Create a new Xcode project
  • 新建一个空的 xcode 项目

  • 项目保存路径与FFmpeg同级.

step 4 添加 FFmpeg 源码目录进 ffmpeg-debug 项目中

  • 1 选中FFmpeg目录
  • 2 拖到项目目录下
  • 3 不要勾选下面这个选项
  • 接着一点要选 ffmpeg-debug, 否则看代码时, 不可以跳转. 写代码时不会有提示.

step 5 添加头文件搜索路径

  • 到这里就可以实现头文件跳转了. 要等待处理完毕才可以点击头文件或者类来查看代码.
  • Search Paths

  • $(SRCROOT)/../FFmpeg

  • $(SRCROOT)/../FFmpeg/libavcodec
  • $(SRCROOT)/../FFmpeg/llibavfilter
  • $(SRCROOT)/../FFmpeg/libavdevice
  • $(SRCROOT)/../FFmpeg/libutil
  • $(SRCROOT)/../FFmpeg/libformat
  • $(SRCROOT)/../FFmpeg/libswscal
  • $(SRCROOT)/../FFmpeg/libpostproc
  • $(SRCROOT)/../FFmpeg/libavresample
  • $(SRCROOT)/../FFmpeg/libswscale

step 6 添加一个 target

  • File -> New -> Target -> Cross-platform -> Other -> External Build System
  • target 命名为 ffmpeg-make

step 7 修改 ffmpeg-make 源码路径配置

  • 修改 ffmpeg-make 源码路径
    • ../FFmpeg

step 8 修改 ffmpeg-make 命令行参数

  • 配置命令行参数

    在Xcode工具栏中选择你的target然后点击Edit Scheme

  • 配置executable

  • 结果

step 9 大功告成 添加断点(ffmpeg.c->main函数), 点击 run