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 文件存储
GDB学习入门之gdb准备2
GDB学习入门之gdb准备2
53 0
GDB学习入门之gdb准备2
|
5月前
|
NoSQL Shell Linux
GDB学习入门之gdb准备
GDB学习入门之gdb准备
46 0
|
5月前
|
NoSQL 小程序 C语言
GDB调试学习(四):段错误
GDB调试学习(四):段错误
134 0
|
5月前
|
NoSQL
GDB调试学习(三):观察点
GDB调试学习(三):观察点
63 0
|
5月前
|
NoSQL
GDB调试学习(二):断点
GDB调试学习(二):断点
64 0
|
4月前
|
NoSQL Linux C++
Linux C/C++ gdb调试core文件
Linux C/C++ gdb调试core文件
|
5月前
|
NoSQL Ubuntu 测试技术
【GDB自定义指令】core analyzer结合gdb的调试及自定义gdb指令详情
【GDB自定义指令】core analyzer结合gdb的调试及自定义gdb指令详情
82 1
|
5月前
|
NoSQL IDE Linux
Linux的学习之路:8、Linux调试器-gdb使用
Linux的学习之路:8、Linux调试器-gdb使用
62 0
|
5月前
|
NoSQL Shell C语言
GDB调试学习(一):单步执行和跟踪函数调用
GDB调试学习(一):单步执行和跟踪函数调用
119 1
|
5月前
|
NoSQL 编译器 Linux
GDB 学习入门之GDB初识
GDB 学习入门之GDB初识
63 0