Linux下如何捕获SIGSEGV 的发生位置

发布时间:2008-04-23 01:28:28来源:红联作者:Mwany

Linux下编程(尤其是服务端程序)若由于内存越界或其他原因产生“非法操作”,会导致程序悄无声息地死去,初学者往往不知道程序死掉的原因。本人也曾饱受程序死不瞑目之苦。其实“非法操作”在绝大多数时候是因为“段错误”,即 SIGSEGV。而找到SIGSEGV信号抛出的位置,也就找到了程序死掉的原因。

下面列出一些捕获SIGSEGV的方法。

假设程序名为 myprg,其进程ID(pid)为 2032。

方法一:

# ./myprg // 运行程序

# ps -ef | grep myprg // 找出 myprg 的 pid

# gdb myprg 2032 > debug.log // 让 gdb 接管 myprg 的运行

# (gdb) continue

此方法利用gdb调试器捕获SIGSEGV。上例中,将gdb输出信息存入debug.log,关闭终端,gdb并不退出,继续运行直到 myprg 出错退出。gdb将捕获到出错点。

方法二:

# ./myprg // 运行程序

# Segment fault (core dumped) // 程序死掉了,系统输出 "Segment fault"

# gdb myprg core // 用 gdb 分析 core 文件

此方法利用core文件,进行事后分析。但前提是保证系统会生成core文件。

如何知道系统会不会生成core文件?可输入命令:

# ulimit -a

查看当前core文件大小的限制,若为0,则需将它改为unlimited。

# ulimit -S -c unlimited

或修改 /etc/profile,找到 unlimit -S -c 0,将0改为unlimited,重启系统。

另外,如果程序安装了 SIGSEGV 异常处理函数,那么 gdb myprg core 时显示的并不是真实的出错位置,要想看到真实的出错点,必须暂时去掉异常处理函数。

linux 捕获sigsegv信息如何生成core文件,Linux下如何捕获SIGSEGV 的发生位置相关推荐

  1. linux 捕获sigsegv信息如何生成core文件,[转]Linux下的段错误产生的原因及调试方法Core Dump...

    简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由 ...

  2. linux下开启程序崩溃生成core文件开关之ulimit详解

    运行服务器程序经常会出现崩溃,而我们不可能一天24小时都等着他出现.在实际运行中也不能总是使用gdb启动,毕竟gdb绑定运行会消耗很大一部分性能. 不过linux系统在程序崩溃时会生成一个coredu ...

  3. linux生成core文件路径,core文件生成和路径设置

    在程序崩溃时,内核会生成一个core文件,即程序最后崩溃时的内存映像,和程序调试信息. 之后可以通过gdb,打开core文件察看程序崩溃时的堆栈信息,可以找出程序出错的代码所在文件和函数. 1.cor ...

  4. core文件 linux,Linux 下core文件的使用

    转储文件(core dump)本来是在程序运行出错的时候产生的.转储文件记录了进程出错时的内存映像,以及进程执行的上下文环境,如寄存器的值等.它的主要用途是在程序运行崩溃时记录下进程的瞬时情况,从而为 ...

  5. ulimit -c unlimited生成core文件

    ulimit -c unlimited ulimint -a 用来显示当前的各种用户进程限制 Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况, 设置个Linux用户的最 ...

  6. linux dd 截文件,Linux使用dd命令快速生成大文件(转)

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  7. Linux dd命令截取文件,linux使用dd命令快速生成大文件

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  8. Linux环境崩溃生成core文件以及调试

    Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是 需要更改Linux设置,使程序崩溃时候产生core文件.然后gdb调试即可. 1产生core文件方法 产生 ...

  9. linux 生成dll文件,Linux和Windows平台 动态库.so和.dll文件的生成

    Linux动态库的生成 1. 纯cpp文件打包动态库 将所有cpp文件和所需要的头文件放在同一文件夹,然后执行下面命令 gcc -shared - fpic *.c -o xxx.so: g++ -s ...

最新文章

  1. 人脸识别的“生意经”
  2. HDFS文件详情查看案例
  3. 【五线谱】符干朝向与连音线 ( 符干朝向 | 第三线以下符干朝上 | 第三线以上符干朝下 | 连音线 )
  4. 如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?
  5. 配置CDI对话的超时
  6. 非常郁闷,WinForm中正常显示的自定义控件无法在WebForm中正常显示!
  7. PHP Warning: date() [function.date]解决方案
  8. Winform 的一个多线程绑定DataGrid数据源的例子
  9. ZigBee开发(15)--组网实验点播
  10. 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...
  11. 很多家长学历不高,无法辅导孩子的家庭作业怎么办?
  12. 《区块链原理、设计与应用》一3.8 本章小结
  13. 精巧好用的DelayQueue
  14. linux修改文件系统属性,实用技巧:修改Linux操作系统的文件属性
  15. pip 下载安装时使用清华大学镜像(各种国内源配置)
  16. 系统学习深度学习(十)--优化算法
  17. iphone个人热点无法开启_为什么苹果手机上的个人热点一直在转不能打开啊
  18. 统计文本大写字母和小写字母和数字和其他字符的个数
  19. MySQL - 建库、建表、查询
  20. --Redis入坑--RedisPipelineException:Pipeline contained one or more invalid commands;WRONGTYPE ...

热门文章

  1. 如何识别全部单号快递公司查询每个单号物流
  2. JavaScript工作学习总结
  3. 抓取虎扑王者荣耀板块最近十页帖子,2.5W回帖数据 ,来看看JR们都有哪些有趣的信息
  4. 电脑出现0xc00000e9错误代码的解决方法
  5. 六年级数学期中考试只考了88分, 但试卷被老师写下:Good! very good!! very very good!!!
  6. 卷积神经网络之4:VGG结构
  7. Matlab基本函数 length函数
  8. Android中OnkeyDown()和OnBackPressed()
  9. 自动分班软件:一分钟制作分班查询系统,这个工具轻松实现
  10. 2024年QS世界大学排行榜!