gdb的编译/使用

gdb源码编译

1下载8.2版本
下载源码路径:
ftp://sourceware.org/pub/gdb/releases/

gdb的编译/使用
2解压:
xd -d gdb-8.2.tar.xz
tar xvf gdb-8.2.tar.gz

3新建build文件夹:
mkdir build

4配置:
cd build
…/gdb-8.2/configure --prefix=/opt/gdb

–prefix=/opt/gdb表示在make install的时候,将文件安装/opt/gdb路径

5 make
make

5.1故障解决
在 make 的过程中,出现了一个错误: makeinfo is missing on your system
gdb的编译/使用
解决方法是:安装 texinfo
sudo apt-get install texinfo

6 make install
会将编译成功的gdb文件安装到/opt/gdb目录下
gdb的编译/使用

gdb调试

1 数组越界代码
//以下两个代码都会导致内存泄漏
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>
#include <memory.h>

int main()
{
#if 0
int *p1 = (int *)malloc(4);

bzero(p1,4);

*p1 = 1;
*(p1+1) = 1;
*(p1+2) = 1;
*(p1+3) = 1;
int i=0;
while(1)
{
(p1+4+i) = 4+i;
printf(“p(%d):%d\n”, 4+i,
(p1+4+i));
i++;
}

free(p1);
#else
int *a = NULL;
*a = 0x01;
#endif

return 0;
}

2 编译代码
注意:编译时加上 -g
gcc -g malloc.cpp -o malloc-test -lz -lc -lm

3 设置生成coredunp文件的环境
3.1 设置core文件大小为无限
ulimit -c unlimited

3.2 设置文件大小为无限
ulimit unlimited

3.3 执行可执行文件 生成core文件
gdb的编译/使用

.4 查看core文件内容
gdb malloc-test core
gdb:gdb为上面装的,只需将/opt/gdb/bin/gdb复制到/usr/bin目录下(或者设置环境变量)
malloc-test:内存泄漏代码的可执行文件
core:执行malloc-test生成的core文件

以下在29行就是导致内存泄漏的地方
gdb的编译/使用