linux下利用core dump 对异常退出的程序调试

本文介绍了在Linux环境中如何设置core dump文件大小,通过编写并运行一个简单的C++程序来触发异常退出,然后使用gdb进行调试。详细步骤包括设置core文件大小、编译带调试信息的程序、运行程序生成core文件,最后使用gdb进行故障排查。此外,还提及了core文件命名规则的控制方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在Linux下,当执行程序异常退出时,系统会将内存中执行的代码copy一份到磁盘,然后将内存释放,其中生成的文件名是core或core.pid,默认生成路径是执行程序所在的目录。
  具体使用步骤:
    1.设置core文件的大小。
        在终端输入命令:$ ulimit -c 1024 
        core文件的最大为1024,大于部分会被截取,此命令设置core文件的大小为1024,也可以设置为其他小于1024的值.
        在终端输入命令:$ ulimit -a
        此命令为查看core文件的一些参数,可以检验你的core文件大小是否设置成功。
        
    2.编写c++程序,名为test.cpp。
      
      #include <iostream>
      using namespace std;
      void solve()
      {
        char *p = NULL;
        cout << *p << endl;
        //显然,此处访问了空内存地址的值,程序将异常退出
      }
      int main()
      {
        void solve();
        solve();
        return 0;
      }


      
    3.编译test.cpp。
      输入命令:$ g++ -Wall -g test.cpp -o test
      系统将生成名为test的可执行文件,用 -g 选项编译是为了调试。
    
    4.运行test。
      输入命令:$ ./test
      系统将提示程序异常退出,并在当前文件夹下生成core文件。
      
    5.采用gdb调试。
      输入命令:$ gdb -core=core
      进入到调试界面。
      输入命令:file ./test
      将符号链接到执行程序
      输入命令:bt
      查看出错的函数
      输入命令:list
      查看出错的代码
  
另外说明:
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 添加命令名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值