Coredump故障分析
来源:互联网 发布:jq源码整体思路 编辑:程序博客网 时间:2024/05/16 17:43
core dump背景
由于一些程序运行异常时间不定,可能几天可能几个月。所以人为去调试找到错误的信息时间太久。所以可以利用coredump来监视,程序异常时会生成错误并存在core文件,通过工具分析这个文件,就可以定位错误
Coredump对付那种错误
产生错误的原因有许多,但一般是段错误segment fault,原因总结如下:
1. 数组访问越界
2. 访问空指针,非法指针
3. 栈溢出
4. 修改只读内存
5. 搜索字符串,例:依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符。
6. 使用strcpy,strcat,sprintf,strcmp等字符串操作字符,将目标字符串写爆炸。应该使用strncpy,strlcpy,strncat,等对宽度限制的函数防止读写越界
7. 随意使用指针转换。一个指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结构或类型的指针,而应该将这段内存拷贝到一个这种结构或类型中,再访问这个结构或类型。这是因为如果这段内存的开始地址不是按照这种结构或类型对齐的,那么访问它时就很容易因为bus error而core dump。
8. 多线程读写数据未加锁保护
Coredump的使用
Linux系统中,默认是关闭coredump
ulimit -c unlimited :打开coredump
ulimit -c 0 :关闭coredump
1. 打开coredump后,写一段犯上述一种错误的程序,编译时候要加上 -g选项,这样发生错误时候生成的core信息会详细。然后执行编译程序。
2. 生成core例如为 core.12525.
3. 用gdb对信息进行调试 执行 gdb ./test core.12525 ,输出信息会提示在何处出错(gdb + 编译后可执行程序名 + core文件名 )
Coredump文件的储存位置
core文件默认的储存位置与对应的可执行程序在同一目录,文件名是core
注意:有好多程序崩溃却找不到core文件,一般是在同一路径,但是如果程序中调用了chdir函数,则有可能改变当前工作目录。这时就在chdir的指定路径下了。(当然程序崩溃了不一定都产生core文件)
通过下面的命令可以更改coredump文件的存储位置,若你希望把core文件生成到/data/coredump/core目录下:
echo “/data/coredump/core”> /proc/sys/kernel/core_pattern
注意,这里当前用户必须具有对/proc/sys/kernel/core_pattern的写权限。
缺省情况下,内核在coredump时所产生的core文件放在与该程序相同的目录中,并且文件名固定为core。很显然,如果有多个程序产生core文件,或者同一个程序多次崩溃,就会重复覆盖同一个core文件,因此我们有必要对不同程序生成的core文件进行分别命名。
我们通过修改kernel的参数,可以指定内核所生成的coredump文件的文件名。例如,使用下面的命令使kernel生成名字为core.filename.pid格式的core dump文件:
echo “/data/coredump/core.%e.%p” >/proc/sys/kernel/core_pattern
这样配置后,产生的core文件中将带有崩溃的程序名、以及它的进程ID。上面的%e和%p会被替换成程序文件名以及进程ID。
如果在上述文件名中包含目录分隔符“/”,那么所生成的core文件将会被放到指定的目录中。 需要说明的是,在内核中还有一个与coredump相关的设置,就是/proc/sys/kernel/core_uses_pid。如果这个文件的内容被配置成1,那么即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。
修改名之后如何判断文件是不是core文件
执行 file + 文件名
- 程序故障分析coredump
- coredump故障分析
- Coredump故障分析
- 小应用大智慧-Coredump故障分析
- 2-3 Coredump程序故障分析
- 一步一步学好Linux开发之Coredump故障分析
- LS3-Coredump程序故障分析之学习笔记
- coredump分析
- coredump 分析
- coredump分析
- coredump 分析(汇总)
- source insight coredump分析
- GDB---coredump分析
- 如何分析CoreDump文件
- coredump的原因以 如何分析coredump文件
- coredump
- Coredump
- coredump
- STM32 USB学习笔记4
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
- Android开发中一些被冷落但却很有用的类和方法
- SAP接口编程-RFC系列12 : Table Parameter作为输出参数
- IOS开发中关于数据的本地化存储
- Coredump故障分析
- 04环信聊天界面 - 完善语音消息在cell上的显示
- 11.Oracle深度学习笔记——操作系统自动化监控脚本
- 源代码管理器git
- python列表删除会出现一个错误 list index out of range
- 排序算法(四)——快速排序
- 总结学习Fckeditor使用方法
- C++基础篇之 复制构造函数调用时机
- tableView中实现headView图片拉伸效果的三种解决方案