core dump

core dump(核心转储/吐核):是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试。
C/C++程序常见coredump总结:

  1. 无效指针引起的程序coredump,大致可以分为4种原因引起异常。
    (1)对空指针进行了操作。
    (2)对一个未初始化的指针进行了操作。
    (3)对一个已经调用了delete释放了内存的指针再次调用了delete去重复释放。
    (4)多线程访问全局变量,导致内存值异常。
  2. 指针越界引起的coredump。
  3. 操作系统相关的特殊性造成的coredump。(字节对齐方式不同;编译器,链接参数)

注:

  1. 存放Coredump的目录即进程的当前目录。(1)/proc/sys /kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。(2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。
  2. core文件的生成开关和大小限制:ulimit -c unlimited
  3. 在配置文件/etc/sysctl.conf中增加kernel.core_pattern=tmp/core.%e.%p.%t,然后执行命令sysctl -p应用这个设置。
  4. 用gdb查看core文件:gdb [exec file] [core file]
  5. /usr/share/apport/apport是Ubuntu下Apport崩溃报告系统的核心脚本。当一个程序由于信号崩溃或内核产生coredump时,Linux内核会通过/proc/sys/kernel/core_pattern调用此脚本,以接管后续的处理流程。生成的.crash崩溃报告会保存在/var/crash/目录下,而不是直接生成传统的core文件;使用apport-unpack解压后会得到core dump文件。关闭apport:sudo systemctl disable --now apport.service # 临时关闭 apport、把/etc/default/apportenable改为0。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容