Linux操作系统的golang coredump dump

Linux使用笔记: 定制core dump文件的文件名 – 易水博客随笔 - 244
阅读排行榜
评论排行榜下次自动登录
现在的位置:
linux core dump学习
linux core dump学习
1. core dump是什么?
core dump又叫核心转储,当操作系统收到特定的signal时,
会生成某个进程的core dump文件。这样程序员可以根据
已经生成的core dump文件来debug查错。
gdb -c core_file ./main
这样就能看到函数的调用栈了,不过很多时候这个调用栈信息
对debug来讲可能是没用的。
2. 如何确认linux系统是否启动了core dump功能?
通过ulimit -c来查看,如果是0说明core dump功能是关着的;
如果是unlimited则说明系统已经打开了core dump功能。
3. 如何开启或关闭core dump功能?
ulimit -c unlimited用来开启core dump功能;
ulimit -c 0则用来关闭core dump功能。
4. umilit命令是干什么的?
ulimit命令通过一些参数选项来管理不同种类的系统资源,
比如-c选项即用来指定core文件的大小。
所以通过ulimit -c可以查看当前系统已经设定的core文件的大小;
通过ulimit -c unlimited可以设置core文件为无限大,也就是
启动了core dump功能了。
ulimit -a可以显示所有的limit信息。
5. 当程序crash时,core dump文件会放到哪里去?
cat /proc/sys/kernel/core_pattern可以查看core dump文件的放置位置,
用户可以根据需要自行设定。例如用户想要将core dump文件放到USB
根目录,可以通过如下的命令来设定:
echo /mnt/usb/sda1/core_%e_sig%s_pid%p & /proc/sys/kernel/core_pattern,
其中%e,%s,%p是core_pattern可以设置的格式符,%e表示命令名,
%s表示产生core dump的signal,%p表示产生core dump的process的PID。
6. 哪些情况不会产生core dump文件?
linux很多signal默认都会产生core dump文件的,
关于这部分我们会放到linux signal那里做详细的讨论,
此处省略一千字。
7. 如何测试所做的core dump配置是否正确?
ulimit -c unlimited
echo /mnt/usb/sda1/core_dump & /proc/sys/kernel/core_pattern
echo 1 & /proc/sys/kernel/core_uses_pid
做了以上设置后,再:
cat /proc/sys/kernel/core_pattern
cat /proc/sys/kernel/core_uses_pid
查看设置是否正确。如果设置都正确的话,
先用ps -A | grep process_name找到需要测试的process的PID。
kill -11 pid向pid这个process发生SIGSEGV。由于core dump文件
通常都很大,所以稍等一会你再去检查/mnt/usb/sda1/,你会发现
下面多了一个类似于core_xx的文件了。
由于SIGSEGV的默认动作会产生core dump文件,所以首先你得确保
你的process没有去接管SIGSEGV,这样kernel才会默认去处理。
如果你的process接管了这个signal,那你可以用其它的一些signal
做实验,因为默认会产生core dump文件的signal有很多。
8. core dump的应用有哪些?
(1) process不预期的崩溃掉。这时如果能取到core dump文件的话,
对解决问题可能会有很大帮助;
(2) 程序卡住或死锁时,发送诸如SIGSEGV等能够默认产生core dump
文件的signal给你的process。借助于core dump文件,可能会高效的
解决问题。
关于core dump的应用,后续有条件会再补充一些实验及实验结果。
9. /proc/PID/coredump_filter是用来干什么的?
sh-# cat /proc/506/coredump_filter
# man core
命令来查看,core dump filter中的每个bit对应一种类型的数据,比如:
bit0 dump anonymous private mappings.
bit1 dump anonymous shared mappings.
设定了相应的bit,即意味着进程崩溃时相应类型的内存数据就会dump下来。
通常core dump filter的设定值为3.
# echo 3 & /proc/&PID&/coredump_filter
&&&&推荐文章:
【上篇】【下篇】博客分类:
1.core文件的生成开关和大小限制--------------------------------- 1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。
2.core文件的名称和生成路径----------------------------core文件生成路径:输入可执行文件运行命令的同一路径下。若系统生成的core文件不带任何扩展名称,则全部命名为core。新的core文件生成将覆盖原来的core文件。
1)/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。可通过以下命令修改此文件:echo "1" & /proc/sys/kernel/core_uses_pid
是内存文件,使用vi 是不能 编译的,所有只能使用append 的方式
这个目录是虚拟在内存中的,不在硬盘保存,
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。可通过以下命令修改此文件:echo "/corefile/core-%e-%p-%t" & core_pattern,可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳以下是参数列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
永久修改:
2. 打开core开关
ulimit -c filesize
一般设置成unlimited即可永久设置, 修改/etc/security/limits.conf文件:
在正式运营的时候,如果有coredump之后自动拉起的机制,比较容易发生core文件堆满磁盘的情况,需要注意。
3. core文件的格式和路径: 修改/proc/sys/kernel/core_pattern
echo '%e.core.%p' & /proc/sys/kernel/core_pattern
各种参数说明
dump进程的进程ID
dump进程的用户ID
dump进程的组ID
导致core dump的信号
core dump的时间
程序文件名
永久设置, 修改/etc/sysctl.conf配置文件,添加一行:
kernel.core_pattern = %e.core.%p
然后执行sysctl -p。
4. core文件是否带pid: 修改/proc/sys/kernel/core_uses_pid如果这个文件的内容被配置成1,那么即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。永久设置, 修改/etc/sysctl.conf配置文件,添加一行:
kernel.core_uses_pid = 1
然后执行sysctl -p。
. 一个小方法来测试产生 core 文件
直接输入指令 :
kill -s SIGSEGV $$
sysctl -a | grep core_pattern
原因好像是因为core pattern设置是abrt,abrt的问题导致core文件很小或者不产生core文件。解决的方法是不使用abrt作为core pattern。
查看机器的core pattern的设置:
sysctl -a | grep core_pattern
/proc/sys/kernel/core_pattern
如果core pattern设置成了abrt,改成core方式:
linux-y94w:/ # sysctl -w kernel.core_pattern=core.%p.%ekernel.core_pattern = core.%p.%e
或者:linux-y94w:/ # sysctl -w kernel.core_pattern=core.%pkernel.core_pattern = core.%p
younglibin
浏览: 770819 次
来自: 北京
“子类对象”都拥有了“父类对象的一个实例的引用”我晕,应该是“ ...
关于楼主最后的问题,我想可能是这样:InputFormat默认 ...
上述7点基本具备,可惜现在因为项目需要,做管理方面工作!
链接已经失效
看了以上7条, 自己 也不知道是否能够对上, 感觉没一点都有那 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 gdb coredump 调试 的文章

 

随机推荐