目录
1生成core文件进行调试
1.1 ulimit -c unlimited 配置core文件大小
1.2运行程序,产生core文件
1.3 gdb调试core文件
1.4查看堆栈信息
2. 实时调试,不用core文件
2.1 进入gdb调试
2.2运行程序
2.3查看堆栈信息
在开发中我们经常会遇到段错误,这个时候首先会想到利用gdb进行调试查找段错误的原因,gdb调试段错误有两种方法,下面分别简单介绍。
使用该方法的前提是编译程序的时候要加上-g选项,使编译出来的代码具有调试信息,要不然没法使用gdb进行调试。
ulimit -c
ulimit -c [filesize] #设置core文件大小,当最小设置为4之后才会生成core文件
ulimit -c unlimited
ulimit -c命令可以查看目前core开关,如果是0.表示core文件大小设置为0,也就是不生成core文件.
ulimit -c [filesize] 命令用来设置core文件的大小,
我们一般用ulimit -c unlimited设置为不受限制.
我们直接运行程序,当程序再次崩溃时就会产生core文件,
./a.out
gdb ./a.out core
上面的命令gdb ./a.out core是利用前面生成的core文件进行调试,运行之后会崩溃,
bt
用bt命令查看堆栈信息,然后就能看到崩溃的位置.综上所述,一共有四个命令,命令如下
ulimit -c unlimited
./a.out
gdb ./a.out core
bt
注意,有一次在使用的时候用bt命令看的崩溃位置根本就不对,最后发现core文件是旧的,把core文件删掉重新生成,然后再调试发现可以了
gdb a.out #如果a.out没有参数
gdb --args a.out 1.jpg #如果a.out有参数,那么用--args
上面的命令会进入gdb调试环境。
run
run命令是指在gdb环境下全速运行程序,执行该命令之后程序会崩溃到段错误的地方,
bt
跟前面一样,同样用bt命令查看堆栈信息,找到程序崩溃原因。