AIX下core文件的分析
笔者曾在AIX系统下使用C语言开发多个应用系统。众所周知,C语言编写程序时容易出现内存使用不当的BUG,例如内存越界、使用野指针、内存未初始化等等。在程序运行时,这些BUG很可能造成程序崩溃,但在测试时往往又无法重现问题。此类问题往往让开发者大伤脑筋,在老板和客户的追杀下无地自容,恨不得一死了之。

幸好,当程序崩溃时,AIX会自动产生一个core文件,该文件保存了进程崩溃时的运行环境,包括当时的函数调用堆栈、栈内存、堆内存等。
将core文件复制到开发环境,使用命令
$ file core
可显示core文件是由哪个进程产生。
将core文件与该进程的文件放到同一路径下,使用命令
$ dbx 进程文件
即可进入dbx调试器,并将此进程文件产生的core文件打开。
此时使用dbx命令
> where
可看到当前的函数调用堆栈(如果调用堆栈还没有被破坏),即可知道程序运行到哪个函数时崩溃了。如果编译时使用了 –g 参数,则还可以看到源码文件名与行序号。
如果出现内存越界的错误,往往调用堆栈已被破坏,此时使用 where 命令看不到调用的函数。这种情况下往往会让大多数程序员束手无策。不过,我们仍然可以通过分析core文件中的内容,获得进程崩溃时的运行数据。在dbx中使用命令
> coremap
可看到此core文件中当前的内存布局。
AIX下core文件的分析的更多相关文章
- [转载]linux下core文件设置与查看
转自:https://blog.csdn.net/dingqinghui/article/details/77855330?locationNum=9&fps=1 linux下core文件设置 ...
- Linux下core文件产生的一些注意问题
前面转载了一篇文章关于core文件的产生和调试使用的设置,但在使用有一些需要注意的问题,如 在什么情况 才会正确地产生core文件. 列出一些常见问题: 一,如何使用core文件 1. 使用core文 ...
- linux下core文件调试方法
http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映 ...
- linux下core文件设置(转)
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数. 1.core文件的生成开 ...
- linux下core文件调试方法(转载)
转自于:http://blog.csdn.net/fcryuuhou/article/details/8507775 在程序遇到段错误不寻常退出时,一般是访问内存出错.但是不会给出程序哪里出现的问题, ...
- lnux 下 core文件
1. core文件的简单介绍在一个程序崩溃时,它一般会在指定目录下生成一个core文件.core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的. 2. 开启或关闭core文件的生成用以下 ...
- linux 下core文件生成、路径、格式设置及调试
core文件生成及调试1 代码 #include<stdio.h> int main() { int *p = NULL; *p = 0; return 0; } 2 在当前shell执行 ...
- Linux下core文件调试
1,ulimit -a查看默认参数 2,ulimit -c 1024 设置core文件大小,如果超过1024个blocks,则不会产生core文件 注:tune2fs -l /dev/sda8 输出分 ...
- 结合程序崩溃后的core文件分析bug
引言 在<I/O的效率比较>中,我们在修改图1程序的BUF_SIZE为8388608时,运行程序出现崩溃,如下图1: 图1. 段错误 一般而言,导致程序段 ...
随机推荐
- Hadoop InputFormat 输入文件分片
1. Mapper 与 Reducer 数量 对于一个默认的MapReduce Job 来说,map任务的数量等于输入文件被划分成的分块数,这个取决于输入文件的大小以及文件块的大小(如果此文件在 HD ...
- java,桶排序,冒泡排序,快速排序
1.桶排序: 百度百科:桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排 ...
- discuzX3.4安装之后,没有任何样式怎么办?
问题:最近在做论坛,想着直接用现成的论坛,但是在安装完成之后,竟然一点样式的都没有,如图: 解决方案: 登录后台->工具->更新缓存
- PHP json_decode为什么将json字符串转成数组是对象格式?
eg. $a='[{\"img\":\"/uploads/agency/carimgs/5/15515954778091.jpg\"},{\"img\ ...
- SWUST OJ(1101)
顺序表中的数据的循环移动 #include <iostream> #include <cstdlib> using namespace std; int main() { in ...
- nodeJs安装Vue-cli
1,安装nodejs安装包,注意安装的路径 2,安装完成node,node有自带的npm,可以直接在cmd中,找到nodeJs安装的路径下,进行命令行全局安装vue-cli.(npm install ...
- 2018的flag
1.leetcode刷到medium的题目不吃力 2.坚持记录自己的独特感悟 3.找到好的工作或者实习,二战计划再看吧 4.好好完成毕设,为大学生活画上完满句号
- D3DX 9.9 LEARNERNOTO
DirectX 9.0 3D游戏开发编程基础一.开发工具:vs2013 or VC++2005 Direct3D API http://msdn.microsoft.com/directx/sdk D ...
- Python3自定义日志类教程
一.说明 Python3的logging功能是比较丰富的支持不同层次的日志输出,但或是我们想在日志前输出时间.或是我们想要将日志输入到文件,我们还是想要自定义日志类. 之前自己也尝试写过但感觉文档太乱 ...
- linux中pthread_join()与pthread_detach()
1.linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态, 如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit ...