目录
https://www.xuebuyuan.com/3228208.html
https://www.jb51.net/article/102675.htm
https://blog.51cto.com/baidutech/904419
当程序运行过程红异常终止或者崩溃,os会将程序当时运行时的内存,寄存器状态,堆栈指针,内存管理信息,各种函数调用堆栈信息等保存在一个文件中。
core文件存储位置
默认的core文件保存在可执行程序所在的目录下,文件名为core。
可以修改默认的存储位置
修改 /proc/sys/kernel/core_users_pid 文件,可以让生成的core文件名是否自动加上pid。
或者修改
/proc/sys/kernel/core_pattern 控制生成的core文件保存的位置以及文件名格式
开启coredump
1.临时生效
ulimit -c // 如果ulimit -c的结果为0, 就说明是没有开启coredump的
ulimit -c unlimited // 设置ulimit为无限制
2.永久生效
/etc/security/limits.conf
* soft core unlimited
* hard core unlimited
或者:
/etc/profile
ulimit -c unlimited
不会生成coredump的情况
coredump产生的几种情况
1.内存访问越界
2.多线程程序使用了线程不安全的函数
3.多线程读写的程序未加锁保护
4.非法指针
5.堆栈溢出
使用gdb进行coredump定位
l(list) ,显示源代码,并且可以看到对应的行号;
b(break)x, x是行号,表示在对应的行号位置设置断点;
p(print)x, x是变量名,表示打印变量x的值
r(run), 表示继续执行到断点的位置
n(next),表示执行下一步
c(continue),表示继续执行
q(quit),表示退出gdb
go coredump调试
https://studygolang.com/articles/11718
go默认不开启coredump,可以通过,在程序崩溃的时候生成coredump文件
export GOTRACEBACK=crash
正在运行的进程生成coredump,而不必kill进程,使用gcore选项,在程序不崩溃的时候生成coredump文件