Linux环境崩溃生成core文件以及调试
来源:互联网 发布:java向数据库添加数据 编辑:程序博客网 时间:2024/05/18 13:30
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文件配置生成和调试方法
谢谢版主
- Linux环境崩溃生成core文件以及调试
- sunsunsun000的分享 分享 Linux环境生成core文件 &&Linux Core Dump 配置与调试
- inux环境生成core文件 &&Linux Core Dump 配置与调试
- arm-linux-gdb+gdbserver环境搭建以及远程调试 及调试core文件
- arm-linux-gdb+gdbserver环境搭建以及远程调试 及调试core文件
- linux下生成core文件及调试
- Linux生成core文件及gdb调试
- linux调试core文件
- linux core文件调试
- linux 调试core文件
- 打开linux调试宏开关生成core文件
- linux下core文件生成及调试方法
- linux下生成core dump文件及调试
- Linux系统中生成调试的core文件
- linux下生成core dump文件调试方法及设置
- Linux 生成 core文件
- 【Linux】GDB调试多线程和多进程以及Core文件
- arm-linux-gdb 环境搭建及调试core文件
- canon相机镜头协议数据用python进行格式化
- iOS UIScrollView 的下拉刷新和上拉加载的实现
- 保存图片到相册
- 查看Oracle中是否有锁表的sql
- Qt MetaObject 详解之二:QMeta数据以及数据结构信息
- Linux环境崩溃生成core文件以及调试
- 前端MVC变形记
- java开发几种常见jar包出问题报错
- keybd_event模拟键盘输入
- 算法之路(三)----查找斐波纳契数列中第 N 个数
- Python关键字yield的解释
- MyBatis基础
- ssl协议流程分析,适合初学者
- 链表倒数第n个节点