gdb core dump使用简介

参考:https://blog.csdn.net/jiange_zh/article/details/51009984?spm=1001.2014.3001.5506

1. gdb core dump的作用

这要分三个方面来理解。gdb是指一个调试器,通常在linux下调试程序。core是指一个文件,该文件是程序运行发生内存段错误时产生的一个文件,保留了内存调用的一些信息。dump是gdb下的一个调试内存调用的命令。
所以这三个单词结合起来的意思就是gdb调试内存错误(个人理解)

2. 使用步骤简介

2.1 打开Linux下生成core文件的功能

ulimit -c unlimited

这个命令只对当前窗口有效,重启后就失效。
生成的日志文件默认叫core,保存在程序运行窗口。

要想重启后也生效,如下设置:

vim /etc/security/limits.conf
# 去掉 soft core 0 一行前面的注释 并将0改为 unlimited;或者指定大小,单位kb,如1024kb

2.2 编写一个测试代码

/**
 * @file test_core_dump.cpp
 */
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
	int *p=0;
	*p = 0x1234;
	cout<<"*p="<<*p;
	return 0;
}

简单编译,运行

g++ test_core_dump.cpp -o test_core_dump
./test_core_dump

运行后输出如下错误

Segmentation fault (core dumped)

在这里插入图片描述
可以看到倒数第2行(gdb)上面已经显示了错误在main()函数里面,但是没有行号和文件名。
因为编译的时候少了一个参数-g。重新编译后,再用gdb调试结果如下。
在这里插入图片描述

2.3 将生成的core文件指定在某一个目录

在/etc/sysctl.conf文件末尾添加下面一行:

kernel.core_pattern=/tmp/core-%e

这样生成的core文件就在/tmp目录,文件名包含是进程名。
然后运行如下命令:

sysctl -p /etc/sysctl.conf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值