在AIX系统中,经常会看到文件名为core的文件,这个文件有用处吗?如果有用,怎么使用?
来源:互联网 发布:移动网络玩守望 编辑:程序博客网 时间:2024/06/11 14:56
当进程在异常终止运行时,系统会把该进程对应的地址空间中的数据写到core文件中(这个过程被称为dump),以便程序员对其进行分析,找出进程异常终止的原因。缺省情况下,异常终止的进程在启动它的当前目录下产生core文件。
在AIX 4.3.3中,所有的core文件的文件名都是core,如果不只一个程序产生dump或者相同的程序dump多次,它们都会产生相同文件名的core文件,那么就会丢失比较早的core文件。从AIX 5.1开始,改变了core文件的命名方法,使得每一个core文件拥有惟一的文件名,从而避免了新的core文件覆盖旧的core文件,这个特色更加有助于程序员调试和跟踪运行失败的程序。
默认情况下,一个core文件的文件名是core。要使用AIX 5L中core文件命名的新方法,就要把CORE_NAMING环境变量的值设置为yes。
在AIX 5L中,把当前用户的CORE_NAMING环境变量的值设置成yes之后,随后启动的进程产生的core文件名才能惟一的。新的core文件名的格式是core.pid.ddhhmmss。其中pid是进程号,dd是当前月份中的日子,hh表示小时,mm表示分,ss表示秒。
对于一个占用内存资源很大的进程产生的core文件也非常大,因此如果经常有进程产生core文件,而core文件名都不相同,那么产生的core就会占用非常多的文件系统空间,所以系统管理员要定期为程序员收集这些core文件,并删除这些文件。在AIX 5.3中,用户可以设置产生压缩的core文件和指定一个目录来保存core文件,用lscore命令查看当前用户或指定用户的core设置,例如:
$ lscore compression: off path specification: off corefile location: not set naming specification: off $
要查看peter用户的core设置,命令是lscore peter。查看整个系统的core设置,命令是lscore –d 用chcore命令修改当前用户的core设置,例如: $ chcore –c on –p on –l /tmp/coredir –n on
上面的命令修改当前用户的core设置,-c on参数的作用是打开压缩core文件功能,用户可以用uncompress命令来解压缩,-p on参数的作用是打开指定的core文件位置,保存core文件的目录是由-l参数指定为/tmp/coredir目录,-n on参数的作用相当于把CORE_NAMING环境变量值设置为yes。其中on表示打开这些功能,将on换成off表示关闭这些功能。
如果要修改指定用户的core设置,在上面的命令最后加上用户名,要修改整个系统的core设置,在上面的命令最后加上-d即可。其实每个用户的core设置保存在/etc/security/user文件中,chcore和lscore命令存取user文件的内容,读者可以参考user文件的内容用vi来设置某个用户的core设置。
每一个core dump会产生一个新的错误日志记录。用errpt命令查看这样的错误日志记录可以帮助程序员识别导致core dump的应用程序。程序员可以用dbx命令来调试产生core文件的程序,要用dbx命令调试有问题的程序时,必须保证core文件和产生core文件的程序都在当前目录下,调试程序的最简单的命令格式如下:
$ dbx ProgramFile CoreFile
ProgramFile是程序文件名,CoreFile是core文件名。在dbx中用where子命令可以查看程序在异常终止时正在执行的函数名,也就是说能够查看程序在执行哪个函数时而异常终止的,然后在源程序中找这个函数,再进一步定位异常语句。dbx命令的详细用法读者可以参考dbx命令的手册。
当一个进程正在运行时,如果程序员想获得这个进程所占内存空间中的内容,可以用gencore命令把这个进程对应的地址空间中的数据写到一个指定的文件中,gencore命令并不会终止进程的运行。例如要把进程号为3682983的进程的内存镜像写到文件名为/tmp/core. 3682983的文件中,命令如下:
$ gencore 3682983 /tmp/core.3682983
如果gencore命令指定的core文件名带有路径,那么用chcore命令所修改的core设置中core文件名和core文件保存目录就无效了
转自:http://hi.baidu.com/mark_tj/blog/item/74ceff1eb8d72ff31bd57684.html
其他: 《AIX系统中不产生CORE文件的十大理由》
IBM的《AIX 下的 core dump 分析入门》
如何把CORE文件发给IBM厂家分析?
在AIX下开发程序中,可能会遇到特别的异常,该异常会产生COREDUMP文件。一般情况下,我们可以通过dbx调试器分析到程序中的BUG,但是若我们经过很长时间还是一无所获的话,我们可以收集一下当前机器的信息以及CORE文件的信息,然后打包发给IBM,由他们代为分析。
具体步骤如下:
1、收集当前系统信息:
errpt -a > errpt.out
lslpp -lc > lslpp.out
instfix -i > instfix.out
bootinfo -K > bootinfo.out
lsattr -El sys0 > lsattr.out
lsps -s > lsps.out
2、打包以上文件:
tar -cf - *.out | compress -c > sysinfo.tar.Z
3、收集当前core文件及相关文件:
格式为:snapcore -d save_directory core.001 fullpath_executable
例子:snapcore -d /tmp/savedir core.001 /usr/java14/jre/bin/java
tar -cf xxxxx.byyy.czzz.#.tar sysinfo.tar.Z core.001.Z core-libs.tar.Z optional-files
4、打包步骤2和步骤3的所有文件为如下格式:
其中:
xxxxx 为PMR代号;
yyy为分支号;
zzz为国家号;
#为唯一代号。
发送文件前,必须确认发送包中包含以下文件:
- sysinfo.tar.Z
- core-libs.tar.Z or snapcore_pid.pax.Z
- core.001.Z
ftp testcase.boulder.ibm.com
login: anonymous
password: user@host.com
> cd /toibm/aix
> bin
> put xxxxx.byyy.czzz.#.tar
> quit
转自:http://blog.sina.com.cn/s/blog_53401bdf0100fl3r.html
- 在AIX系统中,经常会看到文件名为core的文件,这个文件有用处吗?如果有用,怎么使用?
- 在AIX系统中,如何利用名为core的文件?
- gdb core dump 在源码中调用.so 或者.a库文件异常时,怎么看到源代码的信息
- 扩展名为ifo的文件怎么播放
- delphi中后缀名为:.dpr,.dfm,.pas,.cfg,.dof,dcu,.res.ddp,分别表示是什么文件?有什么用处?
- 如果在一个工程中有两个vhd文件,就相当于有两个模块,那么对于这个工程整体的bdf文件生成,怎么把这两个模块都加到同一个bdf文件中。bdf文件中两个模块之间的连线及输入输出,是自己输进去的还是自动生
- AIX系统中不产生CORE文件的十大理由
- 库函数.h文件中经常会有 #define IS_** 之类的定义 是什么意思 比如:
- projectname_Prefix.pch这个文件有什么用处啊?
- 在vim中保存一个文件,会自动在文件的末尾加一个换行符。怎么去掉这个设置?
- javascript 中DWR框架中如果调用struts的.do文件会有问题
- iOS开发中会经常用到文件上传下载的功能
- 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
- 在Linux系统下,如果程序中出现segment fault,如何可以让系统产生core dump文件?如何用gdb来跟踪出错的地方?
- UNIX系统下各文件的用处。
- .djvu 是什么文件阿?怎么把这个文件打开呢? 会的师傅帮帮忙吧!
- Linux 系统中 Core 文件
- core文件的使用
- Struts2 简明开发手册
- 怎样在Word2007里设置首页不显示页码,第二页页码从“2”开始显示?
- 链表常考算法
- 解决ccSvcHst.exe CPU占用超50%的问题,及其缘由
- "Microsoft Office Word 遇到问题需要关闭"如何
- 在AIX系统中,经常会看到文件名为core的文件,这个文件有用处吗?如果有用,怎么使用?
- 英文摘要
- 解决php不能编译bcmath的问题
- JAVA的字符串拼接与性能
- div弹出层
- nagios访问apache权限问题解决
- log4j 详解
- ORA-00904: "DROP_SEGMENTS": invalid identifier 解决方法
- CUDA开发环境高亮显示设置(转)