C++ coredump文件产生、原因分析、GDB调试以及代码优化

目录

1、coredump文件产生

1.1 系统设置

1.2 coredump文件保存路径

1.3 编译选项

2、coredump错误原因以及报错信息

2.1 空指针解引用

2.2 数组越界

2.3 非法内存访问

2.4 内存分配错误

2.5 无穷递归

2.6 除0操作

2.7 断言和退出

3、GDB调试技巧

3.1 加载文件

3.2 调试指令


Core Dump 是指程序在运行时因异常终止而生成的一种文件,记录了程序崩溃时的内存状态、调用栈、寄存器值和变量信息。


1、coredump文件产生

1.1 系统设置

一般linux系统默认不产生coredump文件,通过命令ulimit -c可以查看当前系统状态。

  • 输出 0 表示禁止生成 Core Dump 文件。
  • 输出一个正整数表示允许生成文件数量,unlimited指文件大小没有限制。

如果输出为0,可以通过以下命令更改:

ulimit -c unlimited
1.2 coredump文件保存路径

在 Linux 系统中,Core Dump 文件的默认产生路径由系统的配置决定,通常是程序运行时的工作目录,也就是程序执行时的当前目录。如果系统配置未更改,Core Dump 文件会直接生成在程序运行的当前目录下,文件名通常为 core 或类似 core.<pid>。可以通过查看或修改系统配置文件进行路径设置:

cat /proc/sys/kernel/core_pattern

echo "./core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern

上述是将 Core Dump 文件生成到当前目录,文件名为 core.<程序名>.<PID>其中:

  • %p:进程 ID。
  • %u:进程的实际用户 ID。
  • %g:进程的实际组 ID。
  • %s:导致 Core Dump 的信号编号。
  • %t:Core Dump 生成的时间戳。
  • %h:主机名。
  • %e:程序的文件名。
1.3 编译选项

在开发和调试过程中,为了生成有用的 Core Dump 文件,需要加上-g编译选项。

g++ -g -O0 -o demo main.cpp</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值