linux强制core dump,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

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

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:

.

Find the GDB manual and other documentation resources online at:

.

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=, ptr=, str=0x7fbe404b87a0 "double free or corruption (top)", action=) at malloc.c:

# _int_free (av=, p=, have_lock=) at malloc.c:

# 0x00007fbe403ababc in __GI___libc_free (mem=) at malloc.c:

# 0x0000000000400585 in repeatFree(char*) ()

# 0x00000000004005b6 in main ()

通过调堆栈就能发现死在repeatFree(char*)函数里面,重复释放了同一块内存。

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和主引导记录的作用 ...

随机推荐

电脑新建svn仓库

步骤1:安转svg: 注意事项: 安装的时候选择:Modify 安装到以下图片的步骤时: 黄色区域选择: 步骤2:新建svn仓库文件夹(本教程例子:D:\svn-5gpos),选择文件夹右键,点击下图 ...

webclient 比浏览器加载页面慢的一个问题

测试中发现webclient 比浏览器加载页面慢的一个问题:原因WebClient 支持 gzip, deflate,但是未设置 解决方案: class WebClientEx : WebClient ...

10 函数的复写-override

1.函数的复写:override 2.使用super调用父类的成员函数 class Person { String name; int age; void introduce() { System.o ...

IOS-UITextField-全解

IOS-UITextField-全解   //初始化textfield并设置位置及大小   UITextField *text = [[UITextField alloc]initWithFrame: ...

html弹出div弹窗

uva 759 - The Return of the Roman Empire

#include #include #include using namespace std; ; , , , , ...

再谈cacheAsBitmap

cacheAsBitmap这个属性很多人都知道,但少有人明白它到底是如何生效的.虽然看名字是转换为位图处理,但用起来的时候感觉却也不过如此.所以,不少人最终选择自己转换Bitmap. 当然,自己转Bi ...

Codeforces Round #271 (Div. 2) F. Ant colony 线段树

F. Ant colony time limit per test 1 second memory limit per test 256 megabytes input standard input ...

js常见兼容

滚动条的兼容写法(谷歌chrome) document.documentElement.scrollTop || document.body.scrollTop   阻止浏览器默认行为的兼容写法  e ...

python3 实现细胞自动机

废话不多说,先直接上效果图: “滑翔者”:每4个回合“它”会向右下角走一格.虽然细胞早就是不同的细胞了,但它能保持原本的形态. "脉冲星":它的周期为3,看起来像一颗周期爆发的星星 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux中的core dump是指当程序由于意外错误或异常而崩溃时,系统将程序的内存内容转储到一个文件中,以便后续进行分析。下面是关于如何分析Linux core dump的步骤: 1. 确定core dump文件的位置:默认情况下,core dump文件保存在程序的当前工作目录。你可以使用`ulimit -c`命令来检查核心转储文件的大小限制,或者使用`sysctl kernel.core_pattern`命令查看核心转储文件的位置和名称模式。 2. 确保系统已经安装了相应的调试工具:在分析core dump之前,你需要安装GDB(GNU调试器),它是一个常用的用于调试程序和分析core dump的工具。使用`gdb`命令可以启动GDB。 3. 使用GDB加载core dump文件:在GDB命令行中,使用`gdb <程序名称> core`命令来加载core dump文件。这将打开GDB并加载core dump文件供分析。 4. 分析core dump文件:一旦core dump文件被加载到GDB中,你就可以进行分析了。你可以使用`bt`命令查看程序崩溃时的堆栈跟踪信息,这将有助于定位程序中的错误。你还可以使用其他GDB命令来检查变量的值,查找内存泄漏等。 5. 修复错误并重新编译程序(可选):根据core dump的分析结果,你可以找到程序中的错误并进行修复。之后,你可以重新编译程序并进行测试,以确保问题已解决。 总结起来,通过分析Linux core dump,我们可以确定程序崩溃的原因,并找到解决问题的方法。使用GDB等调试工具可以帮助我们更深入地了解程序内部的情况,从而提高代码的质量和稳定性。 ### 回答2: 在Linux系统中,coredump是指在程序发生异常导致崩溃时生成的包含程序内存和寄存器状态等信息的文件。通过分析coredump,我们可以了解程序崩溃的原因,从而进行故障排查和问题修复。 首先,我们需要使用gdb工具来分析coredump文件。可以通过以下命令来加载coredump文件: gdb 可执行文件路径 core文件路径 然后,我们可以使用gdb提供的一系列命令进行分析,如下: 1. bt:打印出崩溃时的函数调用栈,可以查看崩溃发生的位置和函数调用关系; 2. info registers:显示程序崩溃时寄存器的状态,包括程序计数器、堆栈指针等,可以帮助我们了解程序崩溃时寄存器的值; 3. print 变量名:打印出指定变量的值,可以了解程序崩溃时变量的取值情况; 4. x/地址:打印出指定地址的内存内容; 5. info sharedlibrary:显示程序崩溃时加载的动态链接库信息; 6. source 源代码路径:加载源代码文件,可以查找对应的源代码以进行分析。 通过以上命令,我们可以逐步了解coredump文件中的信息,找出程序崩溃的原因。常见的导致程序崩溃的原因包括空指针引用、数组越界、内存泄漏等。根据不同情况,我们可以调试代码并修复问题。 总而言之,分析coredump是一种定位和解决程序崩溃问题的重要方法,通过分析coredump文件,我们可以了解程序崩溃的原因,并根据相应的信息进行修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值