gdb_调试core文件

4 篇文章 0 订阅

1. core文件的作用

Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件,默认生成位置与可执行程序位于同一目录下,文件名为core.xxx,其中是xxx某一数字。

2. 开启或者关闭core文件

2.1 查看

ulimit -c可以查看当前是否打开了core文件,0表示关闭,

ulimit -c

未开启

2.2 打开core

ulimit -c unlimited

在这里插入图片描述

2.3 but

该配置只在当前会话有效,如果想永久生效,/etc/security/limits.conf
在这里插入图片描述

3. 调试core

3.1 造一个会产生core的程序

// filename=coremain.cpp
#include <stdio.h>

void core_test1()
{
    int i = 0;
    scanf("%d",i);		// 此处会报错,正确写法时“&i”
    printf("%d\n",i);
}

int main()
{
    core_test1();
    return 0;
}

3.2 编译

要带“-g”进行编译

g++  -g  coremain.cpp -o coremain

3.3 运行

[root@tianyiyi core_test]# ./coremain
12
段错误(吐核)
//此时会在当前目录下产生core文件

在这里插入图片描述

3.4 查看core文件,定位core位置

[root@tianyiyi core_test]# file core.66950
[root@tianyiyi core_test]# gdb coremain core.66950

// 进入gdb后
(gdb) bt
#0  0x00007fcdeb5fc301 in __GI__IO_vfscanf () from /lib64/libc.so.6
#1  0x00007fcdeb60b3ab in scanf () from /lib64/libc.so.6
#2  0x00000000004005c0 in core_test1 () at coremain.cpp:6
#3  0x00000000004005df in main () at coremain.cpp:12

// 或者
(gdb) where
#0  0x00007fcdeb5fc301 in __GI__IO_vfscanf () from /lib64/libc.so.6
#1  0x00007fcdeb60b3ab in scanf () from /lib64/libc.so.6
#2  0x00000000004005c0 in core_test1 () at coremain.cpp:6
#3  0x00000000004005df in main () at coremain.cpp:12

在这里插入图片描述

3.5 进入堆栈,查看局部变量

使用命令f N,即可进入某个栈,查看具体的局部变量信息。

  • f :(frame)的简称
  • N :栈号
    在这里插入图片描述
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fantongl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值