Linux coredump解决流程
一、打开core文件限制
a.sudo vi /etc/profile
b.文件末尾添加ulimit -c unlimited
source /etc/profile
把文件重新加载到内存
c.root@ubuntu:~/code# ulimit -c
unlimited
说明core文件限制已经去处。
二、让core文件生成在进程当前目录
echo "core-%e-%p-%t" > /proc/sys/kernel/core_pattern
三、写一个同一块内存释放两次引起coredump的例子定位并解决
a.编写err.cpp代码如下,同一块内存释放了两次。
root@ubuntu:~/code# cat err.cpp
#include<cstdlib>
using namespace std;
void repeatFree(char *p)
{
if(NULL != p)
{
free(p);
}
}
int main()
{
char* pstr =(char*) malloc();
free(pstr);
repeatFree(pstr);
}
b.g++ -o err err.cpp
编译生成err可执行文件。
c. ./err
root@ubuntu:~/code# ./err *** Error in `./err': double free or corruption (top): 0x0000000001911010 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.(+0x77725)[0x7fbe4039f725] /lib/x86_64-linux-gnu/libc.so.(+0x7ff4a)[0x7fbe403a7f4a] /lib/x86_64-linux-gnu/libc.so.(cfree+0x4c)[0x7fbe403ababc] ./err[0x400585] ./err[0x4005b6] /lib/x86_64-linux-gnu/libc.so.(__libc_start_main+0xf0)[0x7fbe40348830] ./err[0x400499] ======= Memory map: ======== - r-xp : /root/code/err - r--p : /root/code/err - rw-p : /root/code/err - rw-p : [heap] 7fbe3c000000-7fbe3c021000 rw-p : 7fbe3c021000-7fbe40000000 ---p : 7fbe40112000-7fbe40128000 r-xp : /lib/x86_64-linux-gnu/libgcc_s.so. 7fbe40128000-7fbe40327000 ---p : /lib/x86_64-linux-gnu/libgcc_s.so. 7fbe40327000-7fbe40328000 rw-p : /lib/x86_64-linux-gnu/libgcc_s.so. 7fbe40328000-7fbe404e8000 r-xp : /lib/x86_64-linux-gnu/libc-2.23.so 7fbe404e8000-7fbe406e7000 ---p 001c0000 : /lib/x86_64-linux-gnu/libc-2.23.so 7fbe406e7000-7fbe406eb000 r--p 001bf000 : /lib/x86_64-linux-gnu/libc-2.23.so 7fbe406eb000-7fbe406ed000 rw-p 001c3000 : /lib/x86_64-linux-gnu/libc-2.23.so 7fbe406ed000-7fbe406f1000 rw-p : 7fbe406f1000-7fbe40717000 r-xp : /lib/x86_64-linux-gnu/ld-2.23.so 7fbe408fb000-7fbe408fe000 rw-p : 7fbe40913000-7fbe40916000 rw-p : 7fbe40916000-7fbe40917000 r--p : /lib/x86_64-linux-gnu/ld-2.23.so 7fbe40917000-7fbe40918000 rw-p : /lib/x86_64-linux-gnu/ld-2.23.so 7fbe40918000-7fbe40919000 rw-p : 7ffe51f1b000-7ffe51f3c000 rw-p : [stack] 7ffe51ff4000-7ffe51ff6000 r--p : [vvar] 7ffe51ff6000-7ffe51ff8000 r-xp : [vdso] ffffffffff600000-ffffffffff601000 r-xp : [vsyscall] Aborted (core dumped)
产生了core文件
root@ubuntu:~/code# ll
total 168
drwxr-xr-x 2 root root 4096 Mar 9 18:20 ./
drwx------ 10 root root 4096 Mar 9 18:18 ../
-rw------- 1 root root 544768 Mar 9 18:20 core-err-9665-1489112441
-rwxr-xr-x 1 root root 8696 Mar 9 18:20 err*
-rw-r--r-- 1 root root 185 Mar 9 18:18 err.cpp
d.gdb ./err core-err-9665-1489112441
执行gdb 执行程序 core文件,然后在gdb里面where
root@ubuntu:~/code# gdb ./err core-err-- GNU gdb (Ubuntu 7.11-0ubuntu1) 7.11 Copyright (C) Free Software Foundation, Inc. License GPLv3+: GNU GPL version or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from ./err...(no debugging symbols found)...done. [New LWP ] Core was generated by `./err'. Program terminated with signal SIGABRT, Aborted. # 0x00007fbe4035d418 in __GI_raise (sig=sig@entry=) at ../sysdeps/unix/sysv/linux/raise.c: ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) where # 0x00007fbe4035d418 in __GI_raise (sig=sig@entry=) at ../sysdeps/unix/sysv/linux/raise.c: # 0x00007fbe4035f01a in __GI_abort () at abort.c: # 0x00007fbe4039f72a in __libc_message (do_abort=do_abort@entry=, fmt=fmt@entry=0x7fbe404b86b0 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c: # 0x00007fbe403a7f4a in malloc_printerr (ar_ptr=<optimized out>, ptr=<optimized out>, str=0x7fbe404b87a0 "double free or corruption (top)", action=) at malloc.c: # _int_free (av=<optimized out>, p=<optimized out>, have_lock=) at malloc.c: # 0x00007fbe403ababc in __GI___libc_free (mem=<optimized out>) at malloc.c: # 0x0000000000400585 in repeatFree(char*) () # 0x00000000004005b6 in main ()
通过调堆栈就能发现死在repeatFree(char*)函数里面,重复释放了同一块内存。
Linux coredump解决流程的更多相关文章
- Linux操作系统启动流程梳理
接触linux系统运维已经好几年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:一般来说,所有的操作系统的启动流程基本就是: 总的来说,linux系统启动流程可以简单总结为以下 ...
- Linux 的启动流程(转)
原文链接:http://blog.jobbole.com/46078/ 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序 ...
- 【转】Linux 的启动流程
半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操 ...
- Linux 的启动流程
转载:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 更多文档参见:http://pan.baidu.com/s/1hqo ...
- 9.Linux系统引导流程
一.Linux系统引导流程 当我们按下主机电源键的那时候开始,主板上的CMOS/BIOS模块将进行固件自检,以此检查各个硬件是否正确连接. 在Linux引导流程中,一般可以分为以下几个主要过程: 1. ...
- linux --> Linux 的启动流程
Linux 的启动流程 操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但一旦进入操作系统,程序员几乎可以定制所有 ...
- linux文件系统启动流程、启动脚本
linux文件系统启动流程.启动脚本 下面是一张Linux启动流程图: 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/ ...
- I.MX6 Linux Qt 启动流程跟踪
/************************************************************************** * I.MX6 Linux Qt 启动流程跟踪 ...
- Linux 的启动流程--转
http://cloudbbs.org/forum.php?mod=viewthread&tid=17814 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用 ...
随机推荐
- poj1164
#include<iostream> using namespace std; ][]; ][]; int roomnum; int maxroom; int m,n; typedef s ...
- fiddler4微信抓包教程
使用fiddler来抓包: 需要先做一些简单的准备工作: 一台带有无线网卡的PC或者笔记本电脑,然后将电脑和手机连接到同一个Wi-Fi网络中,并且保证二者是在同一个ip网段内的: 在电脑上安装 Fid ...
- js自定义格式化时间戳的格式
题目为 : 写一个模块,外部调用这个模块,请求参数是时间戳,模块要求 今天的时间,统一用24小时写作 03:00.15:04 昨天的时间,统一写昨天 昨天之前的时间,但在本周之内的时间,统一用周一.周 ...
- 获取UILabel的numberOfLine
获取UILabel的numberOfLine CGFloat textH = [self.label.text boundingRectWithSize:CGSizeMake(width, MAXFL ...
- kubernetes命令详情
查看客户端和服务器侧的版本信息 kubectl version 列出当前版本的kubernetes的服务器端所支持的api版本信息 kubectl api-versions 查看帮助,语法格式 kub ...
- Java面试题和解答(一)
1.说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? JVM原理 :http://www.cnblogs.com/jiayi/archive/2010/06/08/1753863.html 内存 ...
- 10个Python基础练习项目,你可能不会想到练手教程还这么有趣
美国20世纪最重要的实用主义哲学家约翰·杜威提出一个学习方法,叫做:Learning By Doing,在实践中精进.胡适.陶行知.张伯苓.蒋梦麟等都曾是他的学生,杜威的哲学也影响了蔡元培.晏阳初等人 ...
- CF822D 贪心+递推
CF822D [题目链接]CF822D [题目类型]贪心+递推 &题意: 给你n个人,你可以把他们分组,但必须保持每组相等,分组之后每2个人会比赛,比如一组有i个人,那么就要比赛 次,f[i] ...
- fork()相关的源码解析
fork()的真正执行采用的是do_fork()函数,所以下文将从do_fork()函数对fork()进行源码解析.下图是do_fork()的源码函数设计: 从上图我们可以看到do_fork()涉及到 ...
- sql多行多列重复
在sql的查询中我们会遇到查询的结果比如这样的: 查询这张表的sql语句: select r.ROLE_NAME,u.USERID,u.USERNAME,u.TrueName from BASE_ ...