Linux 下的Core Dump
相信大家都有過在linux 下變成出現(xiàn)core dump或者Segment fault的情況,有的時候這種崩潰情況不一定每次都出現(xiàn),復(fù)現(xiàn)有一定的難度,那樣我們可以查看的就只有coredump文件了。
接下來要說的就是如何設(shè)置coredump以及調(diào)試corddump文件。
一般情況下,linux(目前我用的是centos 6.7)默認(rèn)是不開啟coredump的。
[root@localhost test]# ulimit -c(出現(xiàn)為0的話就代表coredump的文件緩存為0,這樣的話就不會出現(xiàn)coredump文件)
0
我們可以執(zhí)行ulimit -c unlimited來完成(我們可以手動設(shè)置為無限制)
[root@localhost test]# ulimit -c unlimited
[root@localhost test]# ulimit -c
unlimited
這樣的話當(dāng)我們的程序運(yùn)行初選崩潰段錯誤的時候就會在同級目錄生成一個core.xxxx的文件。這個就是我們可以調(diào)試的文件啦。
接下來我們還可以設(shè)置文件的名字屬性,不然的話很多個進(jìn)程一起調(diào)試的話會崩潰掉的,傻傻分不清楚啊。
echo "/var/core/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
將會控制所產(chǎn)生的core文件會存放到/var/core目錄下,產(chǎn)生的文件名為core-命令名-pid-時間戳
以下是參數(shù)列表:
????%p - insert pid into filename?添加pid
????%u - insert current uid into filename?添加當(dāng)前uid
????%g - insert current gid into filename?添加當(dāng)前gid
????%s - insert signal that caused the coredump into the filename?添加導(dǎo)致產(chǎn)生core的信號
????%t - insert UNIX time that the coredump occurred into filename?添加core文件生成時的unix時間
????%h - insert hostname where the coredump happened into filename?添加主機(jī)名
????%e - insert coredumping executable name into filename?添加命令名
這樣設(shè)置的話就差不多啦,至少我就這么用了。
最后的話大家編譯的時候記得加-g調(diào)試信息,關(guān)于怎么調(diào)試coredump的話 ,我相信比較簡單,就是gdb core.xxx,然后把你的可執(zhí)行程序加載進(jìn)來(file xxx), 接下來所有的信息都可以看到啦,具體的GDB調(diào)試的話,我這里就不詳細(xì)說明了。
總結(jié)
以上是生活随笔為你收集整理的Linux 下的Core Dump的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你必须了解的反射——反射来实现实体验证
- 下一篇: Web项目MySQL配置文件运维