• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于Linux的core-dump那些事

linux 搞代码 3年前 (2022-03-03) 34次浏览 已收录 0个评论
文章目录[隐藏]

什么是core?

在linux中,程序运行时出现异常解体,操作系统会将程序过后的内存状态、调用堆栈等信息保留在core文件中。这种行为就是core dump(外围转储)。core文件中个别会保留寄存器信息(包含程序指针、栈指针等)、内存治理信息、CPU和操作系统状态和以及函数调用堆栈等信息。所以,core文件对于开发人员是十分重要的,很多时候咱们都须要依赖对core文件的剖析联合日志来定位和解决解体的问题。

core dump相干设置

在linux中,core dump的一些相干设置办法:

  • 查问:ulimit -c,查问后果为0则示意敞开core dump性能,零碎默认是敞开的。
  • 敞开:ulimit -c 0
  • 关上:ulimit -c unlimited,不限度core文件大小,也能够限度指定大小,单位是blocks(个别为kB),如ulimit -c 100示意限度core文件大小为100k。
  • 批改core文件名生成规定:通过执行命令echo 1 > /proc/sys/kernel/core_uses_pid,能够将生成core文件的文件名改为core.pid。默认状况下,core dump生成的文件名为core,文件生成在程序当前目录下。且新的core会笼罩已存在的core。
  • 批改生成门路和文件名:通过批改/proc/sys/kernel/core_pattern能够管制core文件保留地位和文件格式。例如,通过命令echo “/tmp/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern将core文件保留在/tmp/corefile/目录下,文件名的格局为core-命令名-pid-工夫戳.
  • core_pattern的命名参数如下:

    %e dump的命令名
    %p dump的过程PID
    %t dump工夫戳(由1970年1月1日起计的秒数)
    %s 导致本次core dump的信号
    %c 转储文件的大小下限
    %g dump的过程的理论组ID
    %u dump过程的理论用户ID
    %h 主机名

产生core文件的必备条件

  • 环境变量的设置:通过后面介绍的ulimit –c等环境变量的设置关上core文件的生成限度。
  • 程序编译选项的设置:要产生 core 文件,编译器必须反对把以后过程的镜像以某种格局 dump 到一个文件中,常见的比方 gcc/g++ 的 -g 选项。
  • 解体时的非凡信号:Linux内核会依据过程退出时的信号的类型来决定是否要产生 core 文件。例如SIGSEGV、SIGABRT等信号会产生core,而SIGALRM、SIGPIPE等信号不会产生core。

GDB调试core文件

当程序core dump之后,应用命令gdb program core来查看 core 文件,其中 program 为可执行程序名,core 为生成的 core 文件名。而后执行bt(backtrace)命令查看函数的调用堆栈,定位解体产生的地位。其余gdb调试技巧在此不赘述。

core文件的毛病

  • 因为 core 文件是对过后过程地址空间的镜像,所以 core 文件大小个别都会比拟大,这样很占用磁盘空间,而且如果要将文件从服务器上下载到本地剖析也会比拟耗时。
  • 对于缓冲区溢出导致的 coredump ,过程的调用堆栈曾经被笼罩毁坏了, core 文件显示的堆栈信息往往谬误。
  • 程序因SIGALRM、SIGPIPE等信号解体,则不会产生 core 文件。

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于Linux的core-dump那些事
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址