`
xiezuoming
  • 浏览: 15890 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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 coredump into the filename 添加导致产生core的信号
    %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
    %h - insert hostname where the coredump happened into filename 添加主机名
    %e - insert coredumping executable name into filename 添加命令名




3.core文件的查看
-----------------
core文件需要使用gdb来查看。
gdb ./a.out
core-file core.xxxx
使用bt命令即可看到程序出错的地方。
以下两种命令方式具有相同的效果,但是在有些环境下不生效,所以推荐使用上面的命令。
1)gdb -core=core.xxxx
file ./a.out
bt
2)gdb -c core.xxxx
file ./a.out
bt



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_PATH
set solib-search-path YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_DEVELOPER_TOOLS_LIB_PATH
handle SIG32 nostop noprint pass



注意:待调试的可执行文件,在编译的时候需要加-g,core文件才能正常显示出错信息!有时候core信息很大,超出了开发板的空间限制,生成的core信息会残缺不全而无法使用,可以通过挂载到PC的方式来规避这一点。


另外可参考
http://hi.baidu.com/hongszh/blog/item/660d9913dfbef5d6f6039ee6.html
http://blog.china-pub.com/more.asp?name=uniware&id=35478
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090307/158886.html)

分享到:
评论

相关推荐

    linux下core文件调试方法

    ### Linux下core文件调试方法 #### 1. 启用core文件生成 在默认情况下,大多数Linux发行版为了安全考虑,默认禁用了core文件的生成。我们需要手动启用它: ```bash # 查看当前core文件限制大小 ulimit -c # 设置...

    Linux下core文件调试方法.doc

    Linux下的core文件调试方法是软件开发和系统维护过程中的重要工具。了解如何生成、配置和使用core文件,能够显著提高解决复杂问题的效率,特别是对于那些涉及内存管理和系统级别的错误。熟悉GDB和其他调试工具的...

    Linux下core文件调试方法-电子版课件.ppt

    PPT课件,内部培训文档 Linux下core文件调试方法-电子版课件

    Linux下core文件调试方法.pdf

    Linux core 文件调试方法 Linux core 文件是一种特殊的文件,它记录了程序崩溃时的内存映象和调试信息。它主要用于调试目的,帮助开发者解决程序崩溃问题。 1. Core 文件的简单介绍 Core 文件是在程序崩溃时生成...

    linux coredump分析方法实例介绍

    Linux Core Dump 分析方法实例介绍 本文将通过实例来介绍 Linux 中如何进行 Core Dump 分析,解决死机问题。 一、Core Dump 介绍 Core Dump 是 Linux 系统中一种特殊的文件,它记录了系统崩溃或死机时的系统状态...

    浅析Linux中的core文件及调试方法

    在Linux中,当进程收到这些信号时,如果系统允许生成core文件,且core文件大小未被限制为0,内核就会将进程的内存状态保存到一个名为"core"的文件中,位于进程的工作目录下。 生成core文件并不是POSIX标准的一部分...

    linux core 文件介绍

    Linux Core 文件是一种特殊的文件类型,它是在程序崩溃时生成的,主要用于调试目的。下面将详细介绍 Linux Core 文件的概念、生成机制、使用方法等方面的知识点。 一、Core 文件的简单介绍 Core 文件是一个内存...

    Linux下生成core dump

    通过以上步骤,我们可以有效地在Linux环境下生成和分析core dump文件,这对于调试程序崩溃的原因具有重要的作用。特别是对于开发人员来说,合理配置core dump文件的生成规则,能够大大提升故障排查的效率,从而更快...

    linux生成core文件

    ### Linux生成Core文件详解 在Linux环境中,当一个程序出现异常终止时,系统可以自动生成一个称为core dump的...总之,core文件是Linux下进行程序调试的重要工具之一,合理配置和利用它可以显著提高问题定位的效率。

    Linux下怎么产生core dump文件及GDB怎么调试core.pptx

    通过了解和掌握`core`文件的生成和调试方法,可以大大提高在Linux环境下程序调试的效率。尤其是对于那些难以复现的bug,`core`文件提供了宝贵的线索,帮助开发者快速定位问题。希望本文能够帮助你在日常开发中更好地...

    浅析Linux下core文件.doc

    在Linux中,当进程收到某些信号时,比如SIGABRT(调用abort函数时)、SIGQUIT(用户按下Ctrl-\时)、SIGSEGV(发生无效的内存访问,即段错误)等,系统可能会生成core文件。默认情况下,core文件的生成与否以及大小...

    Linuxcore文件介绍.pdf

    通过调整/proc/sys/kernel/core_pattern文件,可以控制Core Dump文件的命名和存储位置。例如,设置模式为/corefile/core-%e-%p-%t,将使得Core Dump文件按照程序名(%e)、进程ID(%p)和UNIX时间戳(%t)命名。 ...

    Linux下发生段错误时如何产生core文件

    在Linux操作系统中,当一个进程由于各种原因,如非法内存访问、除以零等,触发了段错误(Segmentation Fault)时,系统可以生成一种名为core dump的文件,记录程序崩溃时的内存状态和调用堆栈信息。这对于调试和诊断...

    Linux下core文件的使用方法详解

    前言 有时候程序会异常退出而不带任何日志,此时就可以使用 code 文件进行分析,它会记录程序运行的内存,寄存器,...使用core文件调试 生成方法 查看当前 core 文件的状态 $ ulimit -a ... -c: core file size (blo

    linux core文件生产设置与编码

    本文将详细介绍如何在Linux环境下设置core文件生成,并且编写相应的代码,以便在程序出现段错误时能够获取内存的核心转储文件。 首先,需要了解的是core文件的生成开关以及大小限制。Linux系统默认情况下可能会关闭...

    linux下C++和Qt生成和调试Core文件(3)

    在Linux环境下,C++和Qt开发中,生成和调试Core文件是排查程序错误的重要手段。Core文件是由操作系统在程序异常终止时自动生成的一种二进制文件,它包含了程序崩溃时的内存映像、堆栈信息、寄存器状态等关键数据,对...

    Linux下的段错误Segmentationfault产生的原因及调试方法经典.pdf

    "Linux下的段错误Segmentationfault产生的原因及调试方法经典" 在 Linux 系统中,段错误(Segmentation fault)是一种常见的错误,它是指访问了错误的内存段,或者访问了没有权限的内存区域,或者根本不存在对应的...

Global site tag (gtag.js) - Google Analytics