gdb调试core文件

如果程序在运行的过程中发生了内存泄漏,会被内核强行终止,提示“段错误(吐核)”,内存状态将保存在core文件中,便程序员进一步分析。

Linux缺省不会生成core文件,需要修改系统参数。

调试core文件的步骤如下:

1)用ulimit -a查看当前用户的资源限制参数;

2)用ulimit -c unlimitedcore file size改为unlimited

3)运行程序,产生core文件;

4)运行gdb 程序名 core文件名

5)在gdb中,用bt查看函数调用栈。

示例:

#include <iostream>

int main() {
    int* ptr = new int[10];  // 分配内存
    delete[] ptr;            // 释放内存
    int value = ptr[1000000];  // 故意访问一个非法的大索引
    std::cout << "Value at ptr[1000000]: " << value << std::endl;
    return 0;
}

这段代码中,我们首先分配了一个整数数组,然后释放了它。之后,代码试图访问已经释放的内存,这通常会导致段错误。

2. 编译程序

编译这个程序,记得添加-g选项来包含调试信息:

g++ -g buggy_program.cpp -o buggy_program

3. 设置生成core文件的系统参数

在Linux系统中,core文件默认可能不会生成。你可以按以下步骤设置系统以生成core文件:

  1. 查看当前的core文件大小限制:

    ulimit -a

  2. 设置core文件大小为无限制:

    ulimit -c unlimited

4. 运行程序产生core文件

./buggy_program

运行后,程序应该会崩溃并提示“段错误”。在程序的运行目录中,应该会生成一个名为core或类似的文件。

如果没有生成在当前目录下,可以输下面指令

echo 'core' | sudo tee /proc/sys/kernel/core_pattern

  1. 这将尝试将 core 文件的生成位置设置为当前目录,并且文件名为 core

5. 使用GDB调试core文件

gdb ./buggy_program core

6. 在GDB中查看函数调用栈

在GDB中,使用bt命令查看函数调用栈(backtrace),这可以帮助你了解程序崩溃时的状态:

(gdb) bt

这将显示导致崩溃的函数调用顺序,通常指向代码中引起问题的位置。

通过这个过程,你可以学习如何处理和分析在C++程序中因内存错误导致的崩溃。这是一个非常有用的技能,能帮助你在实际开发中快速定位并解决问题。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值