• 调试--core


    一. 何时产生core.

    当程序接收到以下UNIX信号会产生core文件:

    名字

    说明

    ANSI C  POSIX.1

    SVR4  4.3+BSD

    缺省动作

    SIGABRT

    异常终止(abort)

      .       .

      .      .

    终止w/core

    SIGBUS

    硬件故障

              .

      .      .

    终止w/core

    SIGEMT

    硬件故障

     

      .      .

    终止w/core

    SIGFPE

    算术异常

      .       .

      .      .

    终止w/core

    SIGILL

    非法硬件指令

      .       .

      .      .

    终止w/core

    SIGIOT

    硬件故障

     

      .      .

    终止w/core

    SIGQUIT

    终端退出符

              .

      .      .

    终止w/core

    SIGSEGV

    无效存储访问

      .       .

      .      .

    终止w/core

    SIGSYS

    无效系统调用

     

      .      .

    终止w/core

    SIGTRAP

    硬件故障

     

      .      .

    终止w/core

    SIGXCPU

    超过CPU限制(setrlimit)

     

      .      .

    终止w/core

    SIGXFSZ

    超过文件长度限制(setrlimit)

     

      .      .

    终止w/core

     

    补充:

    kill  -l

    信号 值 处理动作 发出信号的原因 
    ---------------------------------------------------------------------- 
    SIGHUP 1 A 终端挂起或者控制进程终止 
    SIGINT 2 A 键盘中断(如break键被按下) 
    SIGQUIT 3 C 键盘的退出键被按下 
    SIGILL 4 C 非法指令 
    SIGABRT 6 C 由abort(3)发出的退出指令 
    SIGFPE 8 C 浮点异常 
    SIGKILL 9 AEF Kill信号 
    SIGSEGV 11 C 无效的内存引用 
    SIGPIPE 13 A 管道破裂: 写一个没有读端口的管道 
    SIGALRM 14 A 由alarm(2)发出的信号 
    SIGTERM 15 A 终止信号 
    SIGUSR1 30,10,16 A 用户自定义信号1 
    SIGUSR2 31,12,17 A 用户自定义信号2 
    SIGCHLD 20,17,18 B 子进程结束信号 
    SIGCONT 19,18,25 进程继续(曾被停止的进程) 
    SIGSTOP 17,19,23 DEF 终止进程 
    SIGTSTP 18,20,24 D 控制终端(tty)上按下停止键 
    SIGTTIN 21,21,26 D 后台进程企图从控制终端读 
    SIGTTOU 22,22,27 D 后台进程企图从控制终端写 

    二. 如何打开core.

    注意:和shell相关!

     1)使用ulimit -c命令可查看core文件的生成开关

          若结果为0,则表示关闭了此功能,不会生成core文件。
     2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。

          若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。

     如用  ulimit -c 1024   打开core, core文件大小1024k.

    三. core文件位置.

    用cat /proc/sys/kernel/core_pattern查看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

    四. core调试.

    core文件和二进制文件在同一目录下, (不在同一目录下, 写绝对路径)
    (1) gdb ./a.out                               [gdb <二进制文件>]
    (2) core-file core.xxxx                    [core-file  <core文件>]
    (3) bt       可看到程序出错的地方。      [bt]

    或者

    (1) gdb   二进制    core文件

    (2) bt


    以下两种命令方式具有相同的效果,但是在有些环境下不生效,所以推荐使用上面的命令。 
    1)gdb -core=core.xxxx
    file ./a.out
    bt 
    2)gdb -c core.xxxx
    file ./a.out
    bt


        %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 添加命令名

    五.什么时候不产生core文件

    在下列条件下不产生core文件:
    ( a )进程是设置-用户-ID,而且当前用户并非程序文件的所有者;
    ( b )进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;
    ( c )用户没有写当前工作目录的许可权;
    ( d )文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。

  • 相关阅读:
    PHP语言结构
    时钟拖放
    CSS定位
    vi命令(转)
    数值转化Excel列字母的函数
    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较
    数字转化罗马数字的函数
    在VB中如何打开“文件夹选项”对话框?
    纯VB代码取得硬盘的物理序列号 (转)
    项目经理应该做什么
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3967109.html
Copyright © 2020-2023  润新知