产生Core Dump 在Linux中
要使得程序崩溃时产生core dump文件,首先需要设置core文件的大小,默认的core dump文大小最大为0,也就是默认不产生,在这里我们就不做限制,执行
ulimit -c unlimited
可以通过以下命令查看当前ulimit配置
[root@proxy-demo ~
当 core file size 为unlimited时,程序崩溃就会产生core文件,顺便整理一下ulimit文件使用方法:
![e5cb7ac0cfba2b4f0fdd39b79e855400.png](https://i-blog.csdnimg.cn/blog_migrate/ce1ae6cadffee49a3addd930362f8f2d.jpeg)
在程序中指定产生Core Dump文件
在写程序的时候,我们可能会希望在一些严重错误发生的时候终止程序运行。除了打日志和 exit() 以外,我们还可以选择使用 abort()。当执行 abort() 的时候,程序直接退出,不执行清扫,并且会产生 Core Dump 文件(如果 ulimit 允许的话)。
在Docker中产生Core Dump文件
在宿主机上执行
echo
这是因为系统在产生 Core Dump 文件的时候是根据 /proc/sys/kernel/core_pattern 的设定。而默认的设定是 |/usr/share/apport/apport %p %s %c %P,也就是用管道传给 apport。然而 Docker 里面的系统不一定有装 apport,并且 /proc 又是直接挂到 Docker 里面的,所以我们就得改成放到固定的位置去,也就是 /tmp。
另外,在 docker run 的时候要加上以下参数
core
前者就是把 Core Dump 文件的大小设置为无限制,后者是为了开放 ptrace 系列高权限的系统调用,这样我们才可以在 Docker 里面使用 GDB。