core dump[打开及调试]

本文介绍如何在 CentOS 6.5 中配置 Core Dump 的生成、目录及命名规则,以便于开发过程中的调试。

本文系统为centos6.5(vmware中)

1. 开启或关闭core文件的生成
用以下命令来阻止系统生成core文件:
ulimit -c 0
下面的命令可以检查生成core文件的选项是否打开:
ulimit -a
该命令将显示所有的用户定制,其中选项-a代表“all”。

也可以修改系统文件来调整core选项
在/etc/profile通常会有这样一句话来禁止产生core文件,通常这种设置是合理的:
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
但是在开发过程中有时为了调试问题,还是需要在特定的用户环境下打开core文件产生的设置
在用户的~/.bash_profile里加上ulimit -c unlimited来让特定的用户可以产生core文件
如果ulimit -c 0 则也是禁止产生core文件,而ulimit -c 1024则限制产生的core文件的大小不能超过1024kb

2.设置Core Dump的核心转储文件目录和命名规则
/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0
/proc/sys/kernel/core_pattern可以设置格式化的core文件保存位置或文件名,比如原来文件内容是core-%e
可以这样修改:
echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/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 添加命令名

具体操作如下:

[root@root soft_spc]# cd

[root@root ~]# mkdir -p /home/data/corefile

[root@root ~]# chmod 777 /home/data/corefile
[root@root ~]# echo "ulimit -S -c unlimited > /dev/null 2>&1" >> /etc/profile
[root@root ~]# source /etc/profile
[root@root ~]# echo "1" > /proc/sys/kernel/core_uses_pid
[root@root ~]# echo "/home/data/corefile/core-%e-%p_%t" > /proc/sys/kernel/core_pattern
[root@root ~]# echo "1" > /proc/sys/fs/suid_dumpable

[root@root ~]# 


3.测试 

先编译将cpp文件编译、链接成能运行的文件(此步骤要 -g,方便后面的调试),比如main,输入 ./main运行,若的段错误,则会生成一个core dump文件,按照前文的设置办法,此文保留在/home/data/corefile目录下,我们打开此目录,

可以看到生成的core-main文件,在执行./main的黑框中,输入gdb ./main  /home/data/core/

core-main-24444_1503018001, 最后面这个参数为core dump文件的绝对路径+文件名。此时就能看到具体的段错误原因了。。。。


调试coredump时,可以使用gdb来帮助我们定位问题。首先,确保已经安装了gdb工具。接下来,使用gdb打开coredump文件,命令格式为"gdb <可执行文件路径> <coredump文件路径>"。这样就会进入gdb的调试环境。在gdb中,我们可以使用一些命令来获取关于coredump的信息和调试程序。 1. 使用命令"bt"或"backtrace"来查看函数调用栈,这可以告诉我们程序运行到crash的位置之前经过了哪些函数调用。 2. 使用命令"info registers"来查看寄存器的值,这可以帮助我们理解程序在崩溃时的状态。 3. 使用命令"print <变量名>"来查看变量的值,这可以帮助我们了解程序在崩溃时的数据状态。 4. 使用命令"list"来查看源代码,这可以帮助我们找到问题所在的具体代码位置。 5. 使用命令"run"重新运行程序,这可以帮助我们重现coredump并进行调试。 需要注意的是,在调试coredump时,有时候只能从core文件中找出崩溃的直观原因,而更深层次的原因可能需要结合代码和运行上下文来分析。因此,除了使用gdb命令来查看coredump的信息外,还需要对程序的代码进行分析,以便找到问题所在。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [gdb调试coredump(使用篇)](https://blog.youkuaiyun.com/jackhh1/article/details/124434307)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值