使用 Xcode debug FFmpeg 时遇到的一些问题

1,132 阅读1分钟
原文链接: mp.weixin.qq.com

有些方法里,有些变量在 lldb 里打印不出来,但是代码里的 print 是可以正常打出来的,比如这里的 fmt, print 出来的地址是有的,但是不管是左侧的 'Varible view' 还是 lldb 里执行的 p fmt, 都是打不出来的,提示  no location, value may have been optimized out:

(lldb) po fmt
error: Couldn't materialize: couldn't get the value of variable fmt: no location, value may have been optimized outerror: errored out in DoExecute, couldn't PrepareToExecuteJITExpression

解决办法是取消掉编译器的优化,因为我这里是 Xcode,所以使用的是 llvm 编译器,llvm 支持了 optnone attribute,使用方式是在具体的方法后面添加 __attribute__((optnone)) 属性,比如这里:

AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score_ret) __attribute__((optnone))
{     //.....}

再次运行,结果正常了

但是如果很多方法都需要改的话,这样改效率会比较低。所以可以在编译 FFmpeg 的时候,传递一个编译优化参数。正常编译 FFmpeg:

./configure && make -j8
#执行编译优化选项, -O0 表示不做优化:
./configure --optflags="-O0"  && make -j8