1、编译可调试的FFmepg
(1)、使用命令:
./configure --enable-debug --disable-optimizations --disable-asm --disable-stripping
注意一定要加--disable-stripping, 如果不加此选项,ffmpeg在编译时,会使用strip去掉符号信息。
(2)、然后make
make
2、gdb调试
(1)、假设有main.c文件
#include <stdio.h>
int funct(int n)
{
int sum=0,i;
for(i=0; i<n; i++)
{
sum+=i;
}
return sum;
}
void main()
{
int i;
double result = 0;
for(i=1; i<=10; i++)
{
result += i;
}
printf("result[1-50] = %d /n", funct(50) );
}
编译生成执行文件:(Linux下)
gcc -g main.c -o main
(2)、使用gdb调试
gdb main #启动GDB
set args 参数 #指定运行时的参数
start #开始执行程序,停在main函数第一行语句前面等待命令
常用的调试命令有:
r #运行程序
n #单步执行
c #继续运行
info break #查看断点信息
break func #在函数func()的入口处设置断点
break filename:linenum #在源文件filename的linenum行处停住
delete 断点号n #删除第n个断点
gdb调试查看内存
x/<n/f/u> <addr> 注: n、f、u是可选的参数,<addr>表示一个内存地址
f 表示显示的格式,参数 f 的可选值:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容
u 表示将多少个字节作为一个值取出来,如果不指定的话,GDB默认是4个bytes,如果不指定的话,默认是4个bytes。
当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
参数 u 可以用下面的字符来代替:
b 表示单字节
h 表示双字节
w 表示四字节
g 表示八字节
参考网址:http://www.cnblogs.com/shakin/p/3963345.html
参考网址:http://blog.csdn.net/wansbest/article/details/8284514 ffmpeg调试配置
参考网址:http://blog.csdn.net/haoel/article/details/2879/ gdb调试
参考网址:https://wenku.baidu.com/view/5bdb4c83bceb19e8b8f6ba16.html gdb调试
参考网址:http://www.cnblogs.com/hankers/archive/2012/12/07/2806836.html gdb调试