美文网首页
core dump 2023-07-29

core dump 2023-07-29

作者: 9_SooHyun | 来源:发表于2023-07-28 15:06 被阅读0次

Core Dump

what is it

In computing, a core dump, memory dump, crash dump, storage dump, system dump, or ABEND dump consists of the recorded state of the working memory of a computer program at a specific time, generally when the program has crashed or otherwise terminated abnormally.

简而言之,core dump/crash dump就是一个由操作系统记录的进程死亡现场

causes of a core dump

A process dumps core when the operating system terminates it due to an error in the program. The most usual reason for this is that the program accessed an invalid pointer value.

core dump file

core dump 是一个在程序崩溃时由操作系统自动生成的文件,它的存储路径为/data/corefile/,文件名通常带有.{pid}后缀

它包含了程序崩溃时的内存快照、CPU寄存器状态以及其他与程序执行相关的信息。然而,core dump文件可能会包含敏感信息(如密码、密钥等),因此在处理core dump文件时应注意保护数据的安全和隐私。此外,core dump文件通常非常大,可能会占用大量磁盘空间,因此在生产环境中通常会限制core dump文件的大小或完全禁用core dump功能

设置 core dump file 大小

临时配置系统级 core dump

ulimit命令用于设置shell会话中进程的资源限制。要通过ulimit命令设置core dump的大小,执行ulimit -c查看当前会话允许的core dump文件大小限制,执行ulimit -c int设置当前会话允许的core dump文件大小

注意,使用ulimit命令设置的core dump大小限制仅适用于当前shell会话。当您关闭终端或启动新的shell会话时,这些设置将不再生效

持久配置系统级 core dump

在大多数Linux发行版中,可以在/etc/security/limits.conf文件中设置资源限制。例如,要将core dump文件大小限制设置为1 GB,请在文件末尾添加以下行:

#        - core - limits the core file size (KB)
* soft core 1048576
* hard core 1048576

这将为所有用户设置core dump文件的软限制和硬限制。保存文件并重新启动系统以使更改生效

对特定进程配置core dump

  • 查看进程的core dump配置 prlimit --pid your_pid --core or grep "core" /proc/$pid/limits

    [root@VM-241-167-centos /data/corefile]# prlimit --pid 30433 --core
    RESOURCE DESCRIPTION        SOFT      HARD UNITS
    CORE     max core file size 1024 unlimited blocks
    [root@VM-241-167-centos /data/corefile]# grep "core" /proc/30433/limits
    Max core file size        1024                 unlimited            bytes 
    

    1024 bytes is soft limit, unlimited is hard limit

    通常,Max core file size 的 soft limit < 4096 则无法产生core文件

  • 修改进程的core dump配置 prlimit --pid your_pid --core=softlimit:hardlimit

使用 gdb 分析core dump

  1. 使用gdb打开core dump文件和对应的可执行文件:

gdb your_executable your_core_dump_file

这将启动gdb并加载core dump文件

如果你不清楚core dump文件是哪个可执行文件产生的,可以使用gdb -c your_core_dump_file让gdb [尝试] 从core dump文件的元数据中获取可执行文件的信息。如果成功,gdb将自动加载对应的可执行文件

  1. 使用gdb中常用的分析命令进行分析调试:
  • run(或r):启动程序并运行,直到遇到断点或崩溃。

  • break(或b):设置断点。您可以在函数名、源代码文件名及行号或地址处设置断点。例如:

    break main
    break file.c:42
    break *0x123456
    
  • continue(或c):从当前位置继续执行程序,直到遇到下一个断点或崩溃。

  • next(或n):逐行执行程序,但不进入函数调用。

  • step(或s):逐行执行程序,进入函数调用。

  • finish:继续执行程序,直到当前函数返回。

  • print(或p):打印变量或表达式的值。例如:

    print variable_name
    print *pointer
    print array[42]
    
  • bt(backtrace):显示函数调用堆栈。

  • frame(或f):选择堆栈帧。例如:

    frame 3
    

    这将切换到调用堆栈中的第3帧。

  • info locals:显示当前堆栈帧的局部变量及其值。

  • info args:显示当前堆栈帧的函数参数及其值。

  • info registers:显示CPU寄存器的值。

  • list(或l):显示源代码。您可以指定要显示的源代码文件名及行号。例如:

    list file.c:42
    
  • watch:设置观察点,当变量或表达式的值发生变化时,程序将暂停执行。例如:

    watch variable_name
    
  • delete:删除断点或观察点。您可以指定要删除的断点或观察点的编号。例如:

    delete 1
    
  • quit(或q):退出gdb。

许多编程IDE(集成开发环境)的调试器底层实际上是基于类似gdb这样的命令行调试工具。IDE将这些底层调试工具的功能封装成了图形界面,使得开发人员可以更方便地设置断点、查看变量值、单步执行代码等。

例如,在C和C++开发领域,许多流行的IDE(如Eclipse、Visual Studio Code、CLion等)都支持使用gdb作为底层调试器

  1. 样例
[root@VM-241-167-centos /data/devops/os/corefilecheck]# gdb proccore5 /data/corefile/core_proccore5_1690614962.30432
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.tl2
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /data/devops/os/corefilecheck/proccore5...(no debugging symbols found)...done.
[New LWP 30432]
Core was generated by `./proccore5'.    ### Attention: mark core's generator here
Program terminated with signal 11, Segmentation fault.
#0  0x00007f685a89f9e0 in __nanosleep_nocancel () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install bash-4.2.46-34.tl2.3.x86_64 glibc-2.17-326.tl2.x86_64 libgcc-4.8.5-44.tl2.1.x86_64 libstdc++-4.8.5-44.tl2.1.x86_64
(gdb)
(gdb) bt
#0  0x00007f685a89f9e0 in __nanosleep_nocancel () from /lib64/libc.so.6
#1  0x00007f685a89f894 in sleep () from /lib64/libc.so.6
#2  0x000000000040056b in main ()
(gdb)
(gdb) info registers
rax            0xfffffffffffffdfc       -516
rbx            0x7ffdafe16390   140727554237328
rcx            0x7f685a89f9e0   140086172318176
rdx            0x0      0
rsi            0x7ffdafe16380   140727554237312
rdi            0x7ffdafe16380   140727554237312
rbp            0xffffffff       0xffffffff
rsp            0x7ffdafe16378   0x7ffdafe16378
r8             0x7ffdafe16490   140727554237584
r9             0x7ffdafe162d0   140727554237136
r10            0x8      8
r11            0x246    582
r12            0x7ffdafe16410   140727554237456
r13            0x7ffdafe16640   140727554238016
r14            0x0      0
r15            0x0      0
rip            0x7f685a89f9e0   0x7f685a89f9e0 <__nanosleep_nocancel+7>
eflags         0x246    [ PF ZF IF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0
(gdb) list
No symbol table is loaded.  Use the "file" command.
(gdb) file
No executable file now.
No symbol file now.
(gdb) quit

相关文章

  • Linux调试相关

    Linux core dump 设置设置 core dump 大小ulimit -c n或者修改文件 /etc/s...

  • linux编程之 Core Dump

    一、Core Dump 定义 Core Dump 又叫核心转存。当程序在运行过程中发生异常,这时Linux系统可以...

  • 【调试】Core Dump是什么?Linux下如何正确永久开启?

    -- 作者 谢恩铭 转载请注明出处 Core Dump是什么? Core Dump乍听之下很抽象。 当程序运行的过...

  • Core Dump

    工具:GDB 分析 导致进程异常退出的这两类情况: 第一类:向进程发送信号导致进程异常退出; 第二类:代码错误导致...

  • core dump

    core dump(核心转储/吐核):是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进...

  • core dump

    参考: Core dump 打开及配置 Core Linux文档 示例: 打开 配置 生效 查看

  • core dump

    修改 /etc/sysctl.conf加入 kernel.core_pattern = core然后 sysctl...

  • Failed to write core dump. Core

    最近Android Studio频繁崩溃,报错 Failed to write core dump. Core d...

  • Segmentation fault

    core dump触发场景 Segmentation fault (core dumped),这种完全是有page...

  • native调试方法

    linux错误信号 Term 终止进程Core 输出core dump 信号 取值 默认动作 含义...

网友评论

      本文标题:core dump 2023-07-29

      本文链接:https://www.haomeiwen.com/subject/auxdpdtx.html