zoukankan      html  css  js  c++  java
  • Linux下如何生成core dump 文件

    Linux下的C程序常常会因为内存访问等原因造成segment fault(段错误),如果此时core dump 的功能是打开的,在运行我们的可执行程序时就会生成一个名为core的文件,然后我们就可以用gdb对core文件来进行调式,还原发生错误的堆栈情况,这对于我们调试bug非常有帮助。

    1. 使用  ulimit -a 可以察看当前系统core文件的大小限制; 

      使用  ulimit -c [kbytes] 可以设置系统允许生成的core文件大小。

        如:

        ulimit -c 0     --- 不产生core文件  

        ulimit -c 200  --- 设置core文件最大为200k  

        ulimit -c unlimited --- 不限制core文件大小  

     2.  我们先写一段会造成段错误的程序

      

      编译运行结果如下:

      

      此时察看我们当前文件路径并没有core文件生成。

    3.  执行ulimit -a 察看当前系统设置:

      

      此时我们看到当前系统core file size 为0,意思就是不产生core文件。

      现在我们执行如下图的命令,不限制生成core文件的大小。

      

      然后我们运行我们程序,可见core文件就生成了:

      

      最后采用gdb来分析程序,察看堆栈情况:

      

      从上述的输出中可以清楚看到,段错误出现在testCore.c的第6行,问题就已经定位到了。

     

      很多系统默认生成core文件的大小都是0,像这样设置core文件大小,只在当前会话有效,如果关闭终端重新启动的的话就没有了,还需要输入上面的命令。

    4.  如果要设置永久有效,可以修改/etc/security/limits.conf 文件, 找到 * soft core 0,修改为* soft core unlimited保存,这样每次启动时都会去读取这个配置文件。

      

      如果遇到上述情况,打开limits.conf 出现警告这是一个只读文件,可以用chmod 命令来修改文件的权限,添加写权限。

     

  • 相关阅读:
    Powershell数据处理
    Powershell About Active Directory Group Membership of a domain user
    Powershell About Active Directory Server
    Oracle Schema Objects——Tables——TableStorage
    Oracle Schema Objects——Tables——TableType
    English Grammar
    Oracle Database Documentation
    Oracle Schema Objects——Tables——Oracle Data Types
    Oracle Schema Objects——Tables——Overview of Tables
    What is Grammar?
  • 原文地址:https://www.cnblogs.com/jiangson/p/5956674.html
Copyright © 2011-2022 走看看