有些方法里,有些变量在 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