- 浏览: 1608610 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (603)
- T_java (145)
- T_script&ASP (51)
- T_C/C++ (25)
- T_PowerBuilder (11)
- T_Database (53)
- T_odoo (7)
- T_应用服务器 (50)
- T_专_条形码 (6)
- T_专_负载均衡器 (4)
- T_操作系统 (94)
- T_信息安全 (41)
- T_专_搜索引擎 (14)
- T_L_PHP (58)
- T_L_Delphi (18)
- T_L_.NET、C#、VisualStudio (25)
- T_L_Objective-C (6)
- T_移动开发 (53)
- T_网络 (109)
- T_大数据 (2)
- T_嵌入式 (2)
- T_小众技术 (24)
- T_未分类 (58)
- L_旅游印记 (1)
- L_生活随笔 (48)
- L_中国文化 (18)
- L_户外与生存 (0)
最新评论
-
csbean4004:
不知道哪传来得恶习,发帖子不好好发,故意弄错一些东西,很讨厌
让HTML5支持后置摄像头 -
withthewind:
终于找到一个可以用的了。。。
如何用VBA取得Word文档中的标题前面的序号 -
busbby:
兄弟,无法下载,说文件不完整
一个好用的Outlook ost格式文件转pst文件的工具 -
yijavakevin:
密码啊~解压密码多少?
一个二维条形码组件 -
vipbooks:
你给的那个链接根本无法下载,跳到官网看了下最新版12M,但点下 ...
十步以内完成精细web打印
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文件的头部信息
定义coredump的基本信息,及其他信息的地址偏移量
2) ldinfo结构信息
定义loader区的信息
3) mstsave结构信息
定义核心线程的状态信息,错误线程的mstsave结构信息直接存储在core文件的头部区,此区域只对多线程的程序有效,除错误线程外的其他线程的mstsave结构信息存与此区域。
4) 缺省的用户堆栈数据
存储coredump时的用户堆栈数据
5) 缺省的数据区域
存储用户数据区域信息
6) 内存映射数据
存储匿名的内存映射数据
7) vm_info结构信息
存储内存映射区域的地址偏移量和大小信息。缺省情况下,用户数据、匿名的内存区域和vm_info结构信息并不包含在core文件中,core文件值包含当前的进程堆栈、线程堆栈、线程mstsave结构、用户结构和错误时的寄存器信息,这些信息足够跟踪错误的产生。Core文件的大小也可以通过setrlimit函数设定。
二、Core文件分析
首先分析coredump的结构组成,core文件的头信息是由结构core_dump结构定义的,结构成员定义如下:
成员 类型 描述
c_signo char 引起错误的信号量
C_entries ushort Coredump的模块数
*c_tab Struct ld_info Core数据的地址偏移量
c_flag char 描述coredump的类型,类型为:
FULL_CORECore包含数据区域
CORE_VERSION_1生成 core文件的AIX的版本
MSTS_VALID包含mstsave的结构
CORE_BIGDATACore文件包含大数据
UBLOCK_VALIDCore文件包含u_block结构
USTACK_VALIDCore文件包含用户堆栈数据
LE_VALIDCore文件至少包含一个模块
CORE_TRUNCCore文件被截短
c_stack Caddr_t 用户堆栈的起始地址偏移量
C_size int 用户堆栈的大小
C_mst Struct mstsave 错误mst的拷贝
C_u Struct user 用户结构的拷贝
C_nmsts int Mstsave结构的数量
C_msts Struct mstsvae * 线程的mstsave结构的地址偏移量
C_datasize int 数据区域的大小
C_data Caddr_t 用户数据的地址偏移量
C_vmregions int 匿名地址映射的数量
C_vmm Struct vm_info * Vm_info数据表的起始地址偏移量
借助于下面提供的程序可以分析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); }
把该程序编译成可执行程序:
gcc -o anacore anacore.c
(这里也可以用xlc编译器,但我的机器上只有gcc)
现在根据以下步骤编写测试程序并进行测试:
1) 通过下面的程序生成core文件
main() { char *testadd; strcpy(testadd, "Just a testing"); }
程序命名为core.c
2) 编译程序core.c
gcc -o pcore core.c
(这里也可以用xlc编译器,但我的机器上只有gcc)
3) 运行pcore产生core文件
./pcore
Segmentation fault (core dumped)
4) 运行anacore察看结果
./anacore core
5) 结果如下
-bash-3.00$ ./anacore core
Core created by:
|pcore...........|
Signal number and cause of error number: 11
Core file type: 115
Number of core dump modules: 0
Core file format number: 267312561
Thread identifier: 2113597
Process identifier: 1347756
Current effective priority: 60
Processor Usage: 0
Processor bound to: cpu-1
从上面的结果,我们可以简单的分析产生core文件的应用、信号量及进程等信息,如果要求一些更详细的信息,可以借助于dbx等调试工具进一步分析。
发表评论
-
SpringBoot Fat Jar解压运行
2018-06-28 21:40 2258SpringBoot已经成为当前最流行的微服务 ... -
在Ubuntu 18.04 Bionic Beaver上安装Wine
2018-05-04 15:41 2254目标 目标是在Ubuntu 18.04 Bio ... -
Linux挂载阿里云对象存储OSS作为本地磁盘扩充空间备份网站
2017-09-25 08:54 1932p.s.挂载oss之后,使用rsync可以同步图片数据,非 ... -
docker的一些使用技巧
2017-05-26 09:20 5551、如何以root用户进入一个正在运行的容器? docke ... -
Windows批处理中如何实现延时?
2017-05-12 20:56 1667Windows下批处理文件没有像Linux一样的Sleep函 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6695注意: 康虎云报表 ... -
网站获取用户手机号码的方法、系统、客户端及服务器(坑爹的玩意儿)
2016-11-22 14:22 2277网站获取用户 ... -
Sql注入之sqlmap+dvwa实例演练
2016-10-27 16:27 1591Sql注入之sqlmap+dvwa实例演练 相信 ... -
在CentOS上安装Gitlab
2016-10-09 22:04 1146因为涉及的依赖多,所以新手在安装Gitlab时往往遇到不少障 ... -
Ubuntu16.04上安装MT7601网卡驱动(TL-W725N/W725N)
2016-09-15 23:01 0I suggest you get a temporary ... -
从头创建一个最小的CentOS Docker镜像
2016-08-12 17:26 5537一、从头创建一个CentOS的基础框架 首先安装好Cent ... -
Windown下最简安装nodejs和npm
2016-06-20 21:03 683Windown下最简安装nodejs和npm 一、下 ... -
另一个穿透内网的工具(类似ngrok)
2016-06-20 20:26 4830前段时间介绍过两种把内网端口映射到公网的工具:ngrok ... -
Docker无法拉取镜像的一个解决办法
2016-06-16 12:47 14126在阿里云ECS上安装了docker,安装完成后,运行hell ... -
在Ubuntu 16.04上安装Odoo8(附自动安装脚本)
2016-06-09 13:02 2572在Ubuntu 16.04上安装Odoo8 一、安 ... -
ODOO9 SAAS 全自动安装脚本 基于Ubuntu 14.04 LTS
2016-05-09 10:37 2488install-odoo-saas.sh #! ... -
基于 HTTP/2 的 WEB 内网穿透实现(转)
2016-04-22 15:50 1495基于 HTTP/2 的 WEB 内网穿透实现 HTTP ... -
搭建自己的ngrok服务(转)
2016-04-22 15:42 893搭建自己的ngrok服务 在国内开发、企业号 ... -
一个把内网端口映射到外网的工具ngrok(类似与花生壳)
2016-04-22 14:35 1407Secure tunnels to localhost ... -
申请Let's encrypt的免费SSL证书的正确姿势(转)
2016-03-30 19:16 1380申请Let's encrypt的免费SS ...
相关推荐
javaCore文件分析工具(最新版-2012-12-18) 用于分析系统宕机时产生的javacore文件
8. **使用其他工具**:除了GDB,还有一些其他工具如`addr2line`、`nm`、`objdump`等,可以帮助解析二进制文件中的地址和符号信息,辅助分析。 9. **代码审查**:分析完core文件后,对涉及的代码进行仔细审查,查找...
coredump 文件的生成与解析 ...coredump 文件的生成和解析对于程序崩溃后的调试和分析非常重要。通过对 coredump 文件的分析,可以了解程序崩溃的原因和函数调用路径,从而帮助开发者快速地定位和解决问题。
“Core dump解析工具”是一种专门用于读取和分析core dump文件的软件。高通的core dump解析工具可能针对其特定的硬件架构和操作系统进行了优化,能够提供更详细的调试信息,这对于在高通芯片上运行的应用或者系统...
websphere在内存溢出的时候会产生javacore文件,分析这个文件可以看出cpu的使用情况。
`jca412.jar`可能是一个包含Java Core Analysis工具的库文件,用于解析和展示JavaCore日志文件。这种工具通常会提供图形界面或命令行选项,便于用户查看和理解分析结果。 `jca.properties.xml`可能包含了Java Core ...
这个文件最重要的作用就是分析 Java 堆内存泄露问题,heap analyzer,MAT 等工具都可以分析这种文件。 Java core 文件保存的是 java 应用程序在崩溃时或任一时刻关于 Java 运行环境的各种信息。包括 Java 虚拟机的...
### 使用gdb分析core文件相关方法 #### 一、引言 在软件开发与维护的过程中,遇到程序崩溃的情况是常有的事。此时,利用gdb分析core文件是一种非常有效的方法来定位并解决问题。本文旨在详细介绍如何使用gdb来分析...
javacore 文件及 heapdump 文件分析 javacore 文件和 heapdump 文件是 Java 应用程序在遇到致命问题时产生的两个文件,这两个文件可以帮助我们分析和解决 Java 应用程序中的问题。 javacore 文件是一个文本文件,...
通过分析core文件,我们可以定位问题发生的上下文环境、线程状态以及调用栈等关键信息,从而帮助我们找到问题的原因,并进一步解决问题。 ### Linux下core文件调试方法 #### 1. 启用core文件生成 在默认情况下,...
它会调用`jdb`(Java Debug Interface)或者其他分析工具,对javacore文件进行解析。 3. **识别问题**:分析结果会显示各个线程的堆栈跟踪,这有助于定位导致问题的具体代码行或系统调用。如果问题与JCA相关,你...
本篇文章将详细讲解如何使用`javacore`和`heapdump`分析工具,特别是针对Websphere环境的`ha`和`jca`工具,以及如何使用JDK1.6来打开和解析这些文件。 首先,`javacore`文件是Java虚拟机(JVM)在遇到特定事件(如...
2. 分析 Core Dump 文件:使用 GDB 调试器来分析 Core Dump 文件,了解系统崩溃的原因。 3. 加载符号表:使用 file 命令加载符号表,以便后续的分析。 4. 定位段错误:使用 where 命令来定位段错误的位置。 5. 分析...
5. 检查core文件,当有core文件生成后,可以通过dbx命令来加载core文件,分析程序崩溃时的环境。 6. 设置断点和跟踪,这对于程序中特定位置的分析非常有用,可以是基于源代码行、函数,或者是特定条件的断点。 7. ...
通过这种方式,开发者可以逐步解析core文件,了解程序崩溃时的内存布局,从而找出问题的根源并修复它。 总之,Linux中的core文件是调试程序的关键工具,尤其是在处理诸如段错误这样的运行时错误时。理解core文件的...
JavaCore文件分析工具通常包含以下功能: 1. **堆栈跟踪解析**:工具能够解析JavaCore文件中的堆栈跟踪信息,显示各个线程的状态,帮助用户理解哪个线程在出现问题时正在执行哪些操作。 2. **内存分析**:分析工具...
Core Dump文件包含进程终止时刻的内存映像,用于之后进行错误分析和调试。本文档将对Linux中的Core Dump文件进行详细介绍。 ulimit命令 ulimit命令用于控制shell进程及其子进程可以使用的资源。其中,-c选项用于...
"Java Core-HeapDump 文件及其分析方法" Java Core-HeapDump 文件是 Java 应用程序在发生致命问题的情况下产生的两个文件,它们分别是 JavaCore 文件和 HeapDump 文件。这些文件能够帮助开发者保留 Java 应用程序...