引用:http://www.cnblogs.com/secondtonone1/p/5732938.html

Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是

需要更改Linux设置,使程序崩溃时候产生core文件。然后gdb调试即可。

1产生core文件方法

产生coredump的条件,首先需要确认当前会话的ulimit –c,若为0,则不会产生对应的coredump,需要进行修改和设置。

ulimit  -c unlimited  (可以产生coredump且不受大小限制),这种设置仅对当前生效,如果想永久生效

那么需要在

/etc/profile中加入以下一行,这将允许生成coredump文件

ulimit-c unlimited

2更改core dump生成路径

因为core dump默认会生成在程序的工作目录,但是有些程序存在切换目录的情况,导致core dump生成的路径没有规律,

所以最好是自己建立一个文件夹,存放生成的core文件。

我建立一个 /data/coredump 文件夹,在根目录data里的coredump文件夹。

调用如下命令

echo /data/coredump/core.%e.%p> /proc/sys/kernel/core_pattern

将更改core文件生成路径,自动放在这个/data/coredump文件夹里。

%e表示程序名, %p表示进程id

3测试生成core文件以及调试

#include <iostream>
#include <stdio.h> using namespace std;
void core_test1()
{
int i = 0;
//below will call segmentfault
scanf("%d", i);
printf(%d, i); } int main()
{
core_test1();
return 0;
}

该程序在core_test1()内部scanf的时候回崩溃,i前面应该加上&

编译的时候带上-g选项,这样才能用gdb调试core

运行后结果显示段错误

进入/data/coredump文件夹可以查看生成的core

用gdb调试该core,命令为 gdb core.ctest.6408 ,显示如下

program terminated with signal 11 告诉我们信号中断了我们的程序

敲命令: bt 可以打印堆栈信息

这个一堆问号很多人遇到过,有人说是没加载符号表,有人说是标准glibc版本不一致,

可以通过如下命令调试:

gdb 可执行程序exe

进入gdb环境后

core-file  core的名字

敲命令bt可以查看准确信息。

示例:

gdb ./ctest

进入gdb环境后,敲core-file /data/coredump/core.ctest.6408

敲bt命令,这是gdb查看back trace的命令

可以看到最近的栈中存储的是调用了IO操作,之前一步是scanf,再往前能看到是

ctest.cpp中第九行 core_test1()函数出错。

到此为止,就是core文件配置生成和调试方法

core dump 配置的更多相关文章

  1. 【转】段错误调试神器 - Core Dump详解

    from:http://www.embeddedlinux.org.cn/html/jishuzixun/201307/08-2594.html 段错误调试神器 - Core Dump详解 来源:互联 ...

  2. 段错误调试神器 - Core Dump详解

    一.前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件某一行, 而是没有任何信息, 使得我们的调试变得 ...

  3. linux core dump学习

    1. core dump是什么? core dump又叫核心转储,当操作系统收到特定的signal时, 会生成某个进程的core dump文件.这样程序员可以根据 已经生成的core dump文件来d ...

  4. Linux系统打开core dump的配置【转】

    什么是core dump core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.core du ...

  5. 使用GDB 追踪依赖poco的so程序,core dump文件分析.

    前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...

  6. linux下core dump【总结】

    1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志.我不知所措,同事叫我看看core,我却问什么是core,怎么看. ...

  7. linux core dump 文件 gdb分析

    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...

  8. core dump gdb调试

    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...

  9. Linux使用笔记: 定制core dump文件的文件名

    在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因.缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要 ...

随机推荐

  1. Python学习笔记,day3

    Python学习第三天 一.集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作: s = ...

  2. 在Django中使用ForeignKey()报错问题的解决

    在Django2的models中建立一对多的关系使用ForeignKey(): student = models.ForeignKey("Classes") 报错: TypeErr ...

  3. kickstart文件制作与光盘镜像制作

    kickstart文件,是linux(Redhat.Centos.Fedora)下的anaconda安装程序的配置文件,基于此文件,可以实现linux的无人值守安装,在需要大规模部署安装linux的情 ...

  4. python批量下载微信好友头像,微信头像批量下载

    #!/usr/bin/python #coding=utf8 # 自行下载微信模块 itchat 小和QQ496631085 import itchat,os itchat.auto_login() ...

  5. vue---- v-bind指令

    v-bind指令用于给html标签设置属性. 基本用法 <div id="app"> <div v-bind:id="id1">文字&l ...

  6. linux子系统ubuntu16.04安装使用xrdp当远程桌面

    参考文献:https://icytown.com/windows/windows-subsystem-for-linux-gui-xubuntu/ https://jingyan.baidu.com/ ...

  7. Http长连接

    1.Http长连接 Http的请求时在TCP连接上进行发送的,TCP的连接分为长连接和短连接 打开www.baidu.com,查看Connection ID 如下图. Connection ID代表T ...

  8. update_engine-FilesystemVerifierAction和PostinstallRunnerAction

    在介绍完了DownloadAction之后,还剩下FilesystemVerifierAction和PostinstallRunnerAction,下面开始对其进行分析. FilesystemVeri ...

  9. 语音通信中终端上的时延(latency)及减小方法

    时延是语音通信中的一个重要指标,当端到端(end2end)的时延(即one-way-delay,单向时延)低于150Ms时人感觉不到,当端到端的时延超过150Ms且小于450Ms时人能感受到但能忍受不 ...

  10. [蓝桥杯]PREV-26.历届试题_最大子阵

    问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大. 其中,A的子矩阵指在A中行和列均连续的一块. 输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和 ...