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