Linux下如何产生coredump(gdb调试用)

任务发生异常,需要记录遗言信息,利用gdb调试,因此需要记录coredump文件。
设置查看:
在root用户下执行sysctl -a | grep core,查看core文件的配置是否正确
命令设置:
1)使用命令 ulimit -c unlimited 设置coredump文件可以使用最大空间;
  或去vi /etc/security/limits.conf修改
2)/proc/sys/kernal/core_pattern 可以设置coredump产生的路径和文件名格式。如果不修改,默认在程序执行目录下产生。
  或使用命令修改:
    sysctl -w kernel.core_pattern=/core/core.%e.%p
如果设置了上述两点,还是不能产生coredump,可能是以下原因:
1) 有些信号量默认是不产生coredump的,可以用 man signal 看一下。
2) 硬盘空间不够了,coredump需要占用很大的硬盘空间(上G的空间);
3) ulimit -c 命令只在当前terminal上有效,也就是程序启动的terminal设置该命令才有效。该命令无效,当然就不能产生coredump了。

segfault

段错误通常是由于解除引用一个未初始化或非法值的指针引起的。以发生频率为序,最终可能导致段错误的常见编程错误是:

1 、 坏指针错误 :在指针赋值之前就用它来引用内存;或者向库函数传递一个坏指针 ( 如果调试器显示系统程序中出现了段错误,很可能并不是系统程序引起的段错误,问题可能就出现在自己的代码中 ) ;或者指针被释放后还继续访问它的内容。

2 、 改写错误 :越过数组边界写入数据,在动态分配的内存空间以外写入数据,或改写一些堆管理数据结构 ( 在动态分配的内存之前的区域写入数据就很容易发生这种情况 ) 。

3 、 指针释放引起的错误 :释放同一块内存两次,或释放一块未曾使用 malloc 分类的内存,或释放一个无效的指针。一个极为常见的与释放内存有关的错误就是在 for(p=start;p;p=p->next)  这样的循环中迭代一个链表,并在循环体内使用  free(p)  这样的语句。这样,在下一次循环迭代时,程序就会对已经释放的指针进行解除引用操作,从而导致不可预料的结果。

bit2:  值为 1 表示是用户态程序内存访问越界,
值为 0 表示是内核态程序内存访问越界

bit1:  值为 1 表示是写操作导致内存访问越界,
值为 0 表示是读操作导致内存访问越界

bit0:  值为 1 表示没有足够的权限访问非法地址的内容,
值为 0 表示访问的非法地址根

最新文章

  1. django request对象和HttpResponse对象
  2. linux Mint截图软件 Shutter
  3. 漫谈单点登录(SSO)(淘宝天猫)
  4. 【Android】不使用WebView来执行Javascript脚本(Rhino)
  5. CentOS7配置日志(VirtualBox)
  6. Skrollr.js -- 使用Skrollr创建视差滚动效果页面
  7. JavaScript高级程序设计之表单基础
  8. phpcms学习总结
  9. 判断文件是否为UTF8编码
  10. 使用 React 和 Flux 创建一个记事本应用
  11. 网络的基本概念TCP, UDP, 单播(Unicast), 多播(多播)(Multicast)
  12. 基于Log4net插件
  13. Java生日计算年龄工具
  14. C#应用编程小例子-01-渐显的窗体
  15. tag cloud的相关资料
  16. Python开发【第十篇】:模块
  17. hadoop mapreduce 基础实例一记词
  18. 51nod 1805 小树 (组合数模板,逆元公式)
  19. js小游戏:五子棋
  20. .net使用NPOI的XSSFWorkbook进行web开发中导出Excel

热门文章

  1. iOS 内存管理(一)之基础知识介绍
  2. 关于 xib 的使用
  3. macbook pro 重装系统
  4. 多线程基础(七)GCD线程组+栅栏函数
  5. Swift面向对象基础(中)——Swift中的方法
  6. 用的比较多的linux命令
  7. .net串口通信
  8. 如何解决mysql stop fail的问题
  9. 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
  10. SQL中case语句的两种方式