linux进程core文件|linux 怎么分析core文件

linux进程core文件|linux 怎么分析core文件的第1张示图

1. linux系统下调试core文件耗不耗资源

linux下core文件调试方法在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 (1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 (2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。2.core文件的名称和生成路径core文件生成路径:输入可执行文件运行命令的同一路径下。若系统生成的core文件不带其它任何扩展名称,则全部命名为core。新的core文件生成将覆盖原来的core文件。(1)/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。可通过以下命令修改此文件:echo "1" > /proc/sys/kernel/core_uses_pid(2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。可通过以下命令修改此文件:echo "/corefile/core-%e-%p-%t" > core_pattern,可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳以下是参数列表: %p – insert pid into filename 添加pid %u – insert current uid into filename 添加当前uid %g – insert current gid into filename 添加当前gid %s – insert signal that caused the coremp into the filename 添加导致产生core的信号 %t – insert UNIX time that the coremp occurred into filename 添加core文件生成时的unix时间 %h – insert hostname where the coremp happened into filename 添加主机名 %e – insert coremping executable name into filename 添加命令名 3.core文件的查看 core文件需要使用gdb来查看。 gdb ./a.out core-file core.xxxx 使用bt命令即可看到程序出错的地方。 以下两种命令方式具有相同的效果,但是在有些环境下不生效,所以推荐使用上面的命令。 (1)gdb -core=core.xxxxfile ./a.outbt (2)gdb -c core.xxxxfile ./a.outbt 4.开发板上使用core文件调试如果开发板的操作系统也是linux,core调试方法依然适用。如果开发板上不支持gdb,可将开发板的环境(依赖库)、可执行文件和core文件拷贝到PC的linux下。在 PC上调试开发板上产生的core文件,需要使用交叉编译器自带的gdb,并且需要在gdb中指定solib-absolute-prefix和 solib-search-path两个变量以保证gdb能够找到可执行程序的依赖库路径。有一种建立配置文件的方法,不需要每次启动gdb都配置以上变量,即:在待运行gdb的路径下建立.gdbinit。配置文件内容:set solib-absolute-prefix YOUR_CROSS_COMPILE_PATHset solib-search-path YOUR_CROSS_COMPILE_PATHset solib-search-path YOUR_DEVELOPER_TOOLS_LIB_PATHhandle SIG32 nostop noprint pass注意:待调试的可执行文件,在编译的时候需要加-g,core文件才能正常显示出错信息!有时候core信息很大,超出了开发板的空间限制,生成的core信息会残缺不全而无法使用,可以

2. linux core 怎么打开

core文件是由应用程序收到系统信号后崩溃产生的,该文件中记录了程序崩溃的原因(例如收到那种信号),调用堆栈和崩溃时的内存及变量值等等的信息。打开core文件与编译时使用的编译器有关,但绝大多数linux程序是使用gcc编译器编译的,因此可使用对应gdb调试器打开,命令格式如下:$ gdb 应用程序文件名 core文件名举例:$ gdb /usr/bin/gedit ~/core —— 查看由gedit崩溃产生的core文件(gdb) bt —— 或者backtrace, 查看程序运行到当前位置之前所有的堆栈帧情况)(gdb) quit —— 退出如果不知道core文件由哪个文件产生的,可使用file命令显示$ file core

3. linux下的core文件是怎么生成的

在linux平台下,设置core mp文件来生成的方法自: 1 )如何生成 coremp 文件 登陆 LINUX 服务器,任意位置键入 echo "ulimit -c 1024" >> /etc/profile 退出 LINUX 重新登陆 LINUX 键入 ulimit -c 如果显示 1024 那么说明 coremp 已经被开启。…

4. linux程序怎么生成core

在Linux上只要打开core mp文件开关,当程序crash时系统生成相应的core文件。下面是简单的一些步骤: 1.查看当前是否已经打开了此开关 通过命令:ulimit -c 如果输出为 0 ,则代表没有打开。如果为unlimited则已经打开了,就没必要在做打开。

5. linux 怎么分析core文件

从接触unix开始就一直听到和遇到core mp,特别是刚学着使用C语言在AIX下编写程序的时候, mp更是时不时就会不请自来。记得当时刚写应用的时候,提交程序时最怕的就是在运行过程时遇到core mp,对于银行核心系统,特别是使用静态应用进程,如果一个相对频繁一点的交易导致core mp,那么毫无疑问,除了赶紧定位错误改程序外,重启进程甚至无法争取到多少缓冲的时间来进行代码的更正和测试。而且往往导致core mp的,就是程序中一个小小的未注意到或者未测试到的一个疏忽。虽然常常遇到core mp,不过很长时间内,都是出于知道这个名字,知道它导致的后果,知道一部分导致它出现的原因,其他的就都不甚了了了。说起来,就是自己太懒了,懒得看书……少壮不努力啊。看过一则统计,说60岁以上的老人,超过70%都后悔少壮不努力,不知统计的数据能否反映整个社会的情况。不过总的来说,这句古话还是有些道理的。大家不要学我。哈哈core mp,翻译过来讲,就是核心转储。大致上就是指,如果由于应用错误,如浮点异常、指令异常等,操作系统将会转入内核的异常处理,向对应的进程发送特定的信号(SIGNAL),如果进程中没有对这些信号进行处理,就会转入默认的处理,core mp就是其中的一种。如果进程core mp,系统将会终止该进程,同时系统会产生core文件,以供调试使用。这个core文件其实就是内存的映像,即进程执行的时候内存的内容,也就是所谓的core mp。平常大家说某某进程core mp了,其实主要的意思就是说:某某进程因为错误而被系统自动终止了。AIX上提供了dbx工具可以对core mp进行调试,协助定位引起core mp的代码。最普通的语法是:dbx 应用名 core文件, 然后使用where命令来显示调试信息一般来讲,根据工作中遇到的情况,dbx还是能够比较轻松的根据提示的内容来定位代码的。不过也有一些特殊情况时,dbx显示的调试信息过于模糊或者不直观,这个时候就只能根据经验来逐步定位了。有时定位起来会耗用相当长的时间。遇到这种情况时,使用日志文件,通过在代码中穿插多个写log的语句,也可以协助发现。因为进程core mp时,日志当然也中断了,根据日志在哪个代码行之后或之前中止了,可以有效缩小寻找的范围。甚至,在有些情况下,使用日志定位是唯一简便的方法了。

6. linux的dev下的core可以删除吗

可以,Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core mp 文件

7. 怎么查看Linux的core开关,以及如何打开和关闭

mp文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息。在window下,要能生成mp文件,需要自己编写相应的代码。不过现在网上可以找到相应的代码,只要把它下载后然后加到自己的工程中去,就可以了!在linux下面就简单的许多。只要打开相应的开关,linux会自动在程序crash时生成相应的core文件。这个文件和window下的mp文件类似。下面是简单的一些步骤:1.查看当前是否已经打开了此开关通过命令:ulimit -c 如果输出为 0,则代表没有打开。如果为unlimited则已经打开了,就没必要在做打开。2.通过命令打开ulimit -c unlimited .然后通过步骤1,可以监测是否打开成功。3.如果你要取消,很简单:ulimit -c 0 就可以了通过上面的命令修改后,一般都只是对当前会话起作用,当你下次重新登录后,还是要重新输入上面的命令,所以很麻烦。我们可以把通过修改/etc/profile文件 来使系统每次自动打开。步骤如下:1.首先打开/etc/profile文件一般都可以在文件中找到 这句语句:ulimit -S -c 0 /dev/null2&1.ok,根据上面的例子,我们只要把那个0 改为unlimited 就ok了。然后保存退出。2.通过source /etc/profile 使当期设置生效。3.通过ulimit -c 查看下是否已经打开。其实不光这个命令可以加入到/etc/profile文件中,一些其他我们需要每次登录都生效的都可以加入到此文件中,因为登录时linux都会加载此文件。比如一些环境变量的设置。还有一种方法可以通过修改/etc/security/limits.conf文件来设置,这个方法没有试过,也是网上看到。不过上面两种就可以了!最后说一下生成coremp文件的位置,默认位置与可执行程序在同一目录下,文件名是core.***,其中***是一个数字。coremp文件名的模式保存在/proc/sys/kernel/core_pattern中,缺省值是core。通过以下命令可以更改coremp文件的位置(如希望生成到/tmp/cores目录下)echo “/tmp/cores/core”/proc/sys/kernel/core_pattern设置完以后我们可以做个测试,写个程序,产生一个异常。然后看到当前目录会有个core*的文件。然后我们可以gdb core。* 程序 进行调试。

8. linux 下如何打开core mp文件开关

mp文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息。在window下,要能生成mp文件,需要自己编写相应的代码。不过现在网上可以找到相应的代码,只要把它下载后然后加到自己的工程中去,就可以了!在linux下面就简单的许多。只要打开相应的开关,linux会自动在程序crash时生成相应的core文件。这个文件和window下的mp文件类似。下面是简单的一些步骤:1.查看当前是否已经打开了此开关通过命令:ulimit -c 如果输出为 0,则代表没有打开。如果为unlimited则已经打开了,就没必要在做打开。2.通过命令打开ulimit -c unlimited .然后通过步骤1,可以监测是否打开成功。3.如果你要取消,很简单:ulimit -c 0 就可以了通过上面的命令修改后,一般都只是对当前会话起作用,当你下次重新登录后,还是要重新输入上面的命令,所以很麻烦。我们可以把通过修改/etc/profile文件 来使系统每次自动打开。步骤如下:1.首先打开/etc/profile文件一般都可以在文件中找到 这句语句:ulimit -S -c 0 /dev/null2&1.ok,根据上面的例子,我们只要把那个0 改为unlimited 就ok了。然后保存退出。2.通过source /etc/profile 使当期设置生效。3.通过ulimit -c 查看下是否已经打开。其实不光这个命令可以加入到/etc/profile文件中,一些其他我们需要每次登录都生效的都可以加入到此文件中,因为登录时linux都会加载此文件。比如一些环境变量的设置。还有一种方法可以通过修改/etc/security/limits.conf文件来设置,这个方法没有试过,也是网上看到。不过上面两种就可以了!最后说一下生成coremp文件的位置,默认位置与可执行程序在同一目录下,文件名是core.***,其中***是一个数字。coremp文件名的模式保存在/proc/sys/kernel/core_pattern中,缺省值是core。通过以下命令可以更改coremp文件的位置(如希望生成到/tmp/cores目录下)echo “/tmp/cores/core”/proc/sys/kernel/core_pattern设置完以后我们可以做个测试,写个程序,产生一个异常。然后看到当前目录会有个core*的文件。然后我们可以gdb core。* 程序 进行调试。

9. linux有多个core文件,怎么区分它们属于哪个进程

只在ubuntu上试过, 以例子说明强制当前shell sigsegv core mp, 当前shell会退出$kill -SIGSEGV $$core file 已经产生$/var/tmp/cores>lscore用gdb列出program name$gdbGNU gdb (GDB) 7.5-ubuntuCopyright (C) 2012 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show ing"and "show warranty" for details.This GDB was configured as "x86_64-linux-gnu".For bug reporting instructions, please see:<http://www.gnu.org/software/gdb/bugs/>.(gdb) core-file ./core[New LWP 1808]Core was generated by `/usr/local/bin/ksh'.Program terminated with signal 11, Segmentation fault.#0 0x00007f654584d707 in ?? ()(gdb) quit用知道的program名字来load core, 并列出stack$gdb /usr/local/bin/ksh coreGNU gdb (GDB) 7.5-ubuntuCopyright (C) 2012 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show ing"and "show warranty" for details.This GDB was configured as "x86_64-linux-gnu".For bug reporting instructions, please see:<http://www.gnu.org/software/gdb/bugs/>…Reading symbols from /usr/local/bin/ksh…(no debugging symbols found)…done.[New LWP 1808]warning: Can't read pathname for load map: Input/output error.Core was generated by `/usr/local/bin/ksh'.Program terminated with signal 11, Segmentation fault.#0 0x00007f654584d707 in kill () at ../sysdeps/unix/syscall-template.S:8282 ../sysdeps/unix/syscall-template.S: No such file or directory.(gdb) bt#0 0x00007f654584d707 in kill () at ../sysdeps/unix/syscall-template.S:82#1 0x000000000043244c in job_kill ()#2 0x00000000004322ed in job_walk ()#3 0x0000000000474ad9 in b_kill ()#4 0x000000000045d871 in sh_exec ()#5 0x0000000000412b16 in exfile ()#6 0x00000000004135ea in sh_main ()#7 0x0000000000411f7a in main ()

10. linux上的core文件,麻烦牛人们帮忙解释下是什么原因

关于UNIX/Linux系统来下面产生的core文件,根据我自使用系统的经验,通常是由于自己在编写程序的过程中,由于自己的疏忽,使自己编写的程序产生了数组越界、或者是程序中的指针指向了一块无效的内存区域,产生的内存溢出错误。这一点在C语言编程过程中尤为明显,即:虽然定义了一个指针变量,但是未对该变量进行初始化、且判断该指针是否为空指针,而在后面的程序中又使用到了该变量,这时候肯定就会产生内存溢出错误。通常产生的提示信息就是:Segmentfault,CoreDumped!此时再一看自己当前工作的目录下面,就会自动产生出一个文件名为core的文件,通常该文件占得空间也是比较大的,至少好几兆字节。

未经允许不得转载:山九号 » linux进程core文件|linux 怎么分析core文件

赞 (0)