5.1 Ubuntu Clion 调试FFmpeg 4.4.1 代码

FFmpeg下载ffmpeg-4.4.1.tar.xz

思路: 先使用configure配置项目,生成Makefile文件,再用clion打开ffmpeg,进行调试。

一、安装依赖

# 如果要编译出ffplay程序,需要安装SDL2
sudo apt-get install diffutils make pkg-config yasm libsdl2-2.0

二、生成Makefile

# 会根据系统配置生成对应的Makefile文件
./configure \
--prefix=$(pwd)/install \
--enable-gpl \
--enable-nonfree \
--enable-debug=3 \
--disable-optimizations \
--disable-asm \
--disable-stripping

注意:

  • 默认是编译静态库,如果需要编译动态库需要使用编译选项--enable-shared
  • 要使用debug模式,否则会进行代码优化,将一些代码合并运行 以提高运行效率,但会影响调试,代码跟踪会乱跳。

三、使用Clion调试

3.1 clion打开ffmpeg

clion会自动识别项目中的Makefile文件,并列出所有Target配置识别所有Target配置后,会提示清理项目,清理即可,待会用clion重新编译。

在这里插入图片描述

3.2 修改配置并调试

Target选择all,这个配置会编译所有内容。
在这里插入图片描述

(1)调试ffmpeg

代码文件:fftools/ffmpeg.c (搜索main函数,在里面设置断点)
执行程序:ffmpeg
程序参数:-i walking-dead.mp4 walking-dead.flv

在这里插入图片描述

(2)调试ffplay

代码文件:fftools/ffplay.c
执行文件:ffplay
程序参数:-x 200 -i walking-dead.mp4

在这里插入图片描述

3.3 调试技巧

使用Watch Point调试功能,可以监控某个变量什么时候被修改。
在这里插入图片描述

设置生命周期:长期
在这里插入图片描述

3.4 解决clion无法识别Makefile问题

本次使用clion版本是clion-2022.1.1,如果无法识别到Makefile文件,请更新clion或手动添加一个Makefile Application

Makefile在clion的两种配置

  • Makefile Target:类似make xx,不填就是默认,ffmpeg默认是all
  • Makefile Application:类似gdb ./ffpaly (clion也是调gdb来调试的)

添加步骤:

  • 添加Makefile Application配置
  • Executable:可以自行添加一个ffmpeg
  • 参数:-i walking-dead.mp4 walking-dead.flv

在这里插入图片描述

### CLion 调试代码使用指南 #### 设置断点 为了有效地调试程序,在源码编辑器中的特定位置设置断点是必要的操作之一。通过点击行号旁边的空白区域可以轻松创建断点,这使得当执行流到达该处时应用程序会暂停运行以便进一步分析[^2]。 #### 启动调试会话 一旦设置了所需的全部断点之后,可以通过多种方式启动调试过程。对于简单的项目而言,只需按下工具栏上的绿色虫子图标即可;而对于更复杂的构建配置,则可能需要先指定具体的运行/调试配置再开始调试工作流程。 #### 查看变量值与表达式求值 在调试模式下停靠于某个断点时,CLion 提供了一个叫做“Variables”的窗口来展示当前作用域内的所有局部变量及其对应的实时取值情况。此外还支持即时计算任意合法 C/C++ 表达式的功能——即所谓的“Evaluate Expression”,这对于理解复杂逻辑非常有帮助。 #### 步进控制命令 利用步进按钮能够精确掌控程序的单步步调: - **Step Over (F8)**:继续执行直到遇到下一个语句; - **Step Into (F7)**:如果当前行中有函数调用则进入其内部; - **Force Step Into (Alt + F7)**:强制进入到任何被内联展开后的库函数体内; - **Step Out (Shift + F8)**:直接跳出当前正在处理的方法并返回到调用者那里去。 #### 断点管理特性 除了基本的功能外,CLion 还允许用户为每一个单独设立起来的断点附加额外条件从而实现更加精细入微的行为定制化需求。比如仅当满足某些预设前提条件下才会触发中断动作,或者是每当触及此标记之时自动打印一条消息至日志文件之中等等。 ```cpp // 示例代码片段用于说明如何在实际编程环境中应用上述提到的各项技巧 void exampleFunction() { int a = 0; while(a < 5){ std::cout << "Value of 'a': " << a << "\n"; // 假定此处存在一个潜在错误... ++a; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值