摘抄: core文件分析内容提要: 一, Core 文件描述 Coredump 在 unix 平台是非常容易出现的一种错误形式,直接表现形式为 core 文件, core 文件产生于当前目录下, 通常,象内存地址错误、非法指令、总线错误等会引起 coredump , core 文件的内容包含进程出现异常时的错误影 像。如果错误进程为多线程并且 core 文件的大小受限于 ulimit 的系统限制,则系统只将数据区中错误线程的堆栈区 复制到 core 文件中。 应当注意,从 AIX 5L 版本 5.1 开始 core 文件的命名格式可以通过环境变量 CORE_NAMING 设置,其格式为: core.pid.ddhhmmss ,分别代表为: pid :进程标示符 dd :当前日期 hh :当前小时 mm :当前的分钟 ss :当前的秒 core 文件的缺省格式为老版本的格式, coredump 文件的内容按照以下的顺序组织: 1 ) core 文件的头部信息
程堆栈、线程堆栈、线程 mstsave 结构、用户结构和错误时的寄存器信息,这些信息足够跟踪错误的产生。 Core 文件的大小也可以通过 setrlimit 函数设定。 二, Core 文件分析 首先分析 coredump 的结构组成, core 文件的头信息是由结构 core_dump 结构定义的,结构成员定义如下:
借助于下面提供的程序可以分析 core 文件的部分信息: #include <stdio.h> #include <sys/core.h> void main(int argc, char *argv[]) { FILE *corefile; struct core_dumpx c_file; char command[256]; if (argc != 2) { fprintf(stderr, "Usage: %s <corefile>/n", *argv); exit(1); } if ((corefile = fopen(argv[1], "r")) == NULL) { perror(argv[1]); exit(1); } fread(&c_file, sizeof(c_file), 1, corefile); fclose(corefile); sprintf(command, "lquerypv -h %s 6E0 64 | head -1 | awk '{print $6}'", argv[1]); printf("Core created by: /n"); system(command); printf("Signal number and cause of error number: %i/n", c_file.c_signo); printf("Core file type: %i/n", c_file.c_flag); printf("Number of core dump modules: %i/n", c_file.c_entries); printf("Core file format number: %i/n", c_file.c_version); printf("Thread identifier: %i/n", c_file.c_flt.th.ti_tid); printf("Process identifier: %i/n", c_file.c_flt.th.ti_pid); printf("Current effective priority: %i/n", c_file.c_flt.th.ti_pri); printf("Processor Usage: %i/n", c_file.c_flt.th.ti_cpu); printf("Processor bound to: cpu%i/n", c_file.c_flt.th.ti_cpuid); /* if (c_file.c_flt.th.ti_cpu > 1) printf("Last Processor: cpu%i/n", c_file.c_flt.th.ti_affinity); */ exit(0); } 假定以上程序的可执行程序名称为 anacore ,按照以下步骤察看其运行结果: 1 ) 通过下面的程序生成 core 文件
4 ) 运行 anacore 察看结果
Core created by: |pcore...........| Signal number and cause of error number: 11 Core file type: 114 Number of core dump modules: 0 Core file format number: 267312561 Thread identifier: 40827 Process identifier: 9520 Current effective priority: 60 Processor Usage: 0 Processor bound to: cpu-1 从上面的结果,我们可以简单的分析产生 core 文件的应用、信号量及进程等信息,如果要求一 些更详细的信息,可以借助于 dbx 等调试工具进一步分析。 |
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>