Linux下如何生成core dump 文件(解决segment fault段错误的问题)

摘要:
Linux下的C程序经常由于内存访问和其他原因导致分段错误(分段错误)。如果此时打开了coredump的功能,那么在运行我们的可执行程序时会生成一个名为core的文件,然后我们可以使用gdb来调整core文件以恢复错误堆栈,这对我们调试bug非常有帮助。现在我们执行下图所示的命令,而不限制生成的核心文件的大小。

Linux下的C程序常常会因为内存访问等原因造成segment fault(段错误),如果此时core dump 的功能是打开的,在运行我们的可执行程序时就会生成一个名为core的文件,然后我们就可以用gdb对core文件来进行调式,还原发生错误的堆栈情况,这对于我们调试bug非常有帮助。

1. 使用  ulimit -a 可以察看当前系统core文件的大小限制; 

  使用  ulimit -c [kbytes] 可以设置系统允许生成的core文件大小。

    如:

    ulimit -c 0     --- 不产生core文件  

    ulimit -c 200  --- 设置core文件最大为200k  

    ulimit -c unlimited --- 不限制core文件大小  

 2.  我们先写一段会造成段错误的程序

  Linux下如何生成core dump 文件(解决segment fault段错误的问题)第1张

  编译运行结果如下:

  Linux下如何生成core dump 文件(解决segment fault段错误的问题)第2张

  此时察看我们当前文件路径并没有core文件生成。

3.  执行ulimit -a 察看当前系统设置:

  Linux下如何生成core dump 文件(解决segment fault段错误的问题)第3张

  此时我们看到当前系统core file size 为0,意思就是不产生core文件。

  现在我们执行如下图的命令,不限制生成core文件的大小。

  Linux下如何生成core dump 文件(解决segment fault段错误的问题)第4张

  然后我们运行我们程序,可见core文件就生成了:

  Linux下如何生成core dump 文件(解决segment fault段错误的问题)第5张

  最后采用gdb来分析程序,察看堆栈情况:

  Linux下如何生成core dump 文件(解决segment fault段错误的问题)第6张

  从上述的输出中可以清楚看到,段错误出现在testCore.c的第6行,问题就已经定位到了。

  很多系统默认生成core文件的大小都是0,像这样设置core文件大小,只在当前会话有效,如果关闭终端重新启动的的话就没有了,还需要输入上面的命令。

4.  如果要设置永久有效,可以修改/etc/security/limits.conf 文件, 找到 * soft core 0,修改为* soft core unlimited保存,这样每次启动时都会去读取这个配置文件。

  Linux下如何生成core dump 文件(解决segment fault段错误的问题)第7张

  如果遇到上述情况,打开limits.conf 出现警告这是一个只读文件,可以用chmod 命令来修改文件的权限,添加写权限。

http://www.cnblogs.com/jiangson/p/5956674.html

免责声明:文章转载自《Linux下如何生成core dump 文件(解决segment fault段错误的问题)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇谷歌浏览器 html5的声音和视频不能自动播放处理zookeeper 启动显示started,jps查看进程却没有,解决方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux安装mysql5.6

1. 下载mysql  https://dev.mysql.com/downloads/mysql/5.6.html#downloads    2. 上传解压    3. 删除安装包, 重命名解压后的文件    4. 先检查是否有mysql用户组和mysql用户,没有就添加有就忽略: groups mysql    添加用户组和用户 groupadd my...

kafka查询命令---Linux

kafka版本:kafka_2.12-2.1.1 kafka_port默认9092,zk_port默认2181 查看topicbin/kafka-topics.sh --zookeeper zk_ip:zk_port --list 查看groupbin/kafka-consumer-groups.sh --bootstrap-server kafka_ip...

win7下用SSH连接linux虚拟机

本文来自转载:原文 [需求] 在win7环境下用SSH(SecureShell)连接本地的一台虚拟机上ubuntu(11.10)系统  [环境] win7,ubuntu,vmware(8.0) [方案] 首先要确定ubuntu上安装并且启动了ssh服务,然后还要确保linux系统上的防火墙要关闭,win7的防火墙可以正常开启 SSH可以google下...

〖Linux〗noip免费域名申请,及更新域名的API

1. 登录 http://www.noip.com2. 选择 Hosts/Redirects -- Add A Host3. 填写 期望的域名即可(如下图) 4. 更新域名的API: wget -q -O - --http-user=username --http-password=passwd "https://dynupdate.no-ip.com/...

软件测试从业者必备的高频Linux命令

命令 cd 1.如何进入上级目录 cd .. 2.如何进入当前用户主目录 cd ~ 3.如何进入上两级目录 cd ../.. 4.进入当前目录命令 cd . 5.如何进入目录 /usr/isTester cd /usr/isTester 命令 mv 1.移动一个文件夹(isTester文件夹,移动到/APP/www目录) mv ~/isTester/ /A...

linux 查看系统资源使用信息的一些命令集合

linux上的进程查看及管理工具: pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,nice,renice,killall。。。 linux开机时,会启动第一个进程,由这个进程去启动别的进程,这个第一个进程在centos5,6,7上实现的...