zoukankan      html  css  js  c++  java
  • 调试--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文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。

  • 相关阅读:
    java_oop_方法2
    POJ 3276 Face The Right Way(反转)
    POJ 3276 Face The Right Way(反转)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3061 Subsequence(尺取法)
    POJ 3061 Subsequence(尺取法)
    HDU 1222 Wolf and Rabbit(欧几里得)
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3967109.html
Copyright © 2011-2022 走看看