GDB学习之Core Dump

简介:     很多版本的Linux都是关闭core dump功能的。可以使用ulimit –c来判断当前系统是否启用core dump。 点击(此处)折叠或打开$ulimit –c0-c为内核core dump文件大小限制,0表示该系统没有开启core dump,可以使用下边的命令来开启core dump。
    很多版本的Linux都是关闭core dump功能的。可以使用ulimit –c来判断当前系统是否启用core dump

点击(此处)折叠或打开

  1. $ulimit –c
  2. 0
-c为内核core dump文件大小限制,0表示该系统没有开启core dump,可以使用下边的命令来开启core dump

点击(此处)折叠或打开

  1. $ulimit –c unlimited

以下边的程序为例来看一下core文件。coredump.cpp

点击(此处)折叠或打开

  1. #includestdio.h>

  2. int main()
  3. {
  4.     int *a = NULL;
  5.     *a = 0;
  6.     return 0;
  7. }

使用下边的命令进行编译并运行,-g为加入调试信息,在用GDB调试的时候会用到。

点击(此处)折叠或打开

  1. g++ coredump.cpp -g -o coredump
  2. ./coredump

可以看到在程序所在目录生成了一个core文件,可以使用GDB调试生成的core文件,命令如下:

点击(此处)折叠或打开

  1. $gdb -c core ./coredump
  2. GNU gdb 6.8-debian
  3. Copyright (C) 2008 Free Software Foundation, Inc.
  4. License GPLv3+: GNU GPL version 3 or later <>>
  5. This is free software: you are free to change and redistribute it.
  6. There is NO WARRANTY, to the extent permitted by law. Type "show copying"
  7. and "show warranty" for details.
  8. This GDB was configured as "i486-linux-gnu"...

  9. warning: Can't read pathname for load map: Input/output error.
  10. Reading symbols from /usr/lib/libstdc++.so.6...done.
  11. Loaded symbols for /usr/lib/libstdc++.so.6
  12. Reading symbols from /lib/tls/i686/cmov/libm.so.6...done.
  13. Loaded symbols for /lib/tls/i686/cmov/libm.so.6
  14. Reading symbols from /lib/libgcc_s.so.1...done.
  15. Loaded symbols for /lib/libgcc_s.so.1
  16. Reading symbols from /lib/tls/i686/cmov/libc.so.6...done.
  17. Loaded symbols for /lib/tls/i686/cmov/libc.so.6
  18. Reading symbols from /lib/ld-linux.so.2...done.
  19. Loaded symbols for /lib/ld-linux.so.2
  20. Core was generated by `./coredump'.
  21. Program terminated with signal 11, Segmentation fault.
  22. [New process 3346]
  23. #0 0x080484a4 in main () at coredump.cpp:6
  24. 6 *a = 0;

从上面的信息可以看到,错误出现在第六行收到了信号11,即Segmentation fault

    默认情况下,系统在当前文件夹下生成core文件,若希望在指定路径下生成core文件,需要在/etc/sysctl.conf中设置:

点击(此处)折叠或打开

  1. kernel.core_pattern = /home/XXX/core/%t-%e-%p-%c.core

并且在命令行执行sysctl –p命令。这两步都需要有管理员权限才可以执行,格式符的具体含义和其他格式符的使用请参阅相关文档。

    对于大规模系统,有的可能会使用几个G的内存,在这种情况下如果全部dump出来将会给磁盘造成巨大的压力。dump过程也会增加系统的负载,可能会导致服务的抖动或暂停。因此,内核增加了选择dump区段的功能。对于共享内存,所有的进程都是相同的内容,因此没有必要所有进行都dump出该段内存,只选择其中的一个进行进行dump就可以了。

设置可以通过设置/proc//coredump_filter来进行相关设置,coredump_filter使用比特位的形式来进行表示。

0位:匿名专用内存

1位:匿名公共内存

2位:file-backed专用内存

3位:file-backed共享内存

4位:ELF文件映射。

可以使用cat命令来查看,使用echo命令来进行修改,例如:

点击(此处)折叠或打开

  1. cat /proc/4023/coredump_filter
  2. echo 1 > /proc/4023/coredump_filter

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
5月前
|
NoSQL Linux C++
Linux C/C++ gdb调试core文件
Linux C/C++ gdb调试core文件
|
6月前
|
NoSQL Ubuntu 测试技术
【GDB自定义指令】core analyzer结合gdb的调试及自定义gdb指令详情
【GDB自定义指令】core analyzer结合gdb的调试及自定义gdb指令详情
93 1
|
11月前
|
NoSQL Docker 容器
core 文件与gdb 调试
core 文件与gdb 调试
45 0
|
NoSQL Unix Linux
Linux下gdb调试生成core文件并调试core文件
Linux下gdb调试生成core文件并调试core文件
2050 1
Linux下gdb调试生成core文件并调试core文件
|
NoSQL 网络协议 Linux
【GDB调试】Linux Core Dump分析经典案例之一
这次我们一起来看一下在GDB调试中属于比较典型的案例,因此也借这篇文章向大家阐述个人在分析Core Dump时的一些思路。
5207 0
|
NoSQL C语言
|
NoSQL Linux C语言
什么是 core dump ? 以及如何使用gdb对 core dumped 进行调试
什么是core dump?(down = 当)   core的意思是:内存,dump的意思是:扔出来、堆出来。   开发和使用linux程序时,有时程序莫名其妙的down掉了,却没有任何的提示(有时候会提示core dumped)。
3452 0
|
6月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
368 2
|
3月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
59 10