首页 > 系统相关 >ubuntu下core file文件生成及调试

ubuntu下core file文件生成及调试

时间:2023-05-24 18:44:57浏览次数:54  
标签:-% core corefile kernel pattern 文件 file ubuntu

1.简介:
corefile 是Linux下程序崩溃时生成的文件,可以用来分析程序崩溃的原因,因为它内部包含了程序崩溃时的堆栈信息。

2.corefile的设置

默认情况下,程序崩溃是不会生成corefile的,因为被操作系统限制。可以通过命令: ulimit -c 来查看,如果值为0则表示被限制了,所以不能生成corefile文件.

如果要使用corefile文件分析程序和系统异常信息,可以通过如下命令打开,其中unlimited表示corefile文件的大小无限制.

$ ulimit -c unlimited

这种设置方式虽然简单,但它却只是跟shell相关的,也就是说,如果我们关闭了当前shell再打开一个,则刚才的设置就失效了,这是很不方便的,可以将ulimit -c unlimited 放入/etc/profile中,然后执行source /etc/profile即可立即生效。

如果想配置只针对某一用户有效,则修改此用户的~/.bashrc或者~/.bash_profile文件:

$ ulimit -c unlimited
$ source .bashrc 

3.设置Core Dump的核心转储文件目录和命名规则

默认corefile是生成在程序的执行目录下或者程序启动调用了chdir之后的目录,我们可以通过设置生成corefile的格式来控制它,让其生成在固定的目录下。

/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0
/proc/sys/kernel/core_pattern可以设置格式化的core文件保存位置或文件名,比如原来文件内容是core-%e

# echo "/home/saneri/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

将会控制所产生的core文件会存放到corefile目录下,产生的文件名为core-命令名-pid-时间戳

或者

$ sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t

如果想让每次启动都保存设置,则需要写入配置文件中.

# echo "kernel.core_pattern=/home/saneri/corefile/core-%e-%p-%t" >> /etc/sysctl.conf 
# sysctl -p /etc/sysctl.conf 
kernel.core_pattern = /home/saneri/corefile/core-%e-%p-%t

关于格式的的控制有如下几个参数:

复制代码
%%:相当于%
%p:相当于<pid>
%u:相当于<uid>
%g:相当于<gid>
%s:相当于导致dump的信号的数字
%t:相当于dump的时间
%e:相当于执行文件的名称
%h:相当于hostname
复制代码

4.测试是否能生成core文件

$ kill -s SIGSEGV $$

查看 corefile目录下是否生成了core文件 

5.用gdb查看core文件

gdb -c core文件路径 [应用程序的路径]

进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.

 ################################################################################

设置方法二:

1.用户家目录下建立corefiles文件夹.

$ mkdir corefiles

2.修改/etc/init.d/apport文件,在do_start 函数中添加 echo "/home/ubuntu/corefiles/core-%e-%p-%t" > /proc/sys/kernel/core_pattern  (注意替换为你的 corefiles 目录的路径),注释掉原来的 echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern;

复制代码
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started

        [ -e /var/crash ] || mkdir -p /var/crash
        chmod 1777 /var/crash

        # check for kernel crash dump, convert it to apport report
        if [ -e /var/crash/vmcore ] || [ -n "`ls /var/crash | egrep ^[0-9]{12}$`" ];then
            /usr/share/apport/kernel_crashdump || true
        fi

        # check for incomplete suspend/resume or hibernate
        if [ -e /var/lib/pm-utils/status ]; then
                /usr/share/apport/apportcheckresume || true
                rm -f /var/lib/pm-utils/status
                rm -f /var/lib/pm-utils/resume-hang.log
        fi

echo "/home/ubuntu/corefiles/core-%e-%p-%t" > /proc/sys/kernel/core_pattern #echo "|$AGENT %p %s %c %P" > /proc/sys/kernel/core_pattern echo 2 > /proc/sys/fs/suid_dumpable }
复制代码

3.添加用户系统变量.在.bashrc文件底部添加如下:

$ vim .bashrc

ulimit -c unlimited
$ source .bashrc 

 当系统异常时就会在corefiles文件目录下生成core文件。

标签:-%,core,corefile,kernel,pattern,文件,file,ubuntu
From: https://www.cnblogs.com/tomato-haha/p/17429228.html

相关文章

  • Ubuntu18.04 安装 clang
    官网:https://apt.llvm.org 一、添加源: 根据官方页面提示,找到系统分类,ubuntu18.04源: -debhttp://apt.llvm.org/bionic/llvm-toolchain-bionicmaindeb-srchttp://apt.llvm.org/bionic/llvm-toolchain-bionicmain#Needs'sudoadd-apt-repositoryppa:ubuntu-to......
  • rm datafile恢复实验【未完】
    from手记41.[oracle@redhat5asm11g]$ls-tltotal1889656-rw-r-----1oracleoinstall9748480Aug2905:17control01.ctl-rw-r-----1oracleoinstall52429312Aug2905:17redo02.log-rw-r-----1oracleoinstall566239232Aug2905:17sysaux01.dbf......
  • 【愚公系列】2023年05月 .NET CORE工具案例-C#调用Python的二种方式
    (文章目录)前言.NET调用Python的作用和意义是可以利用Python强大的数据处理和机器学习能力,结合.NET的优势进行开发,提高开发效率和应用性能。同时,Python也可以通过.NET进行调用,实现跨语言的开发和应用。一、C#调用Python的三种方式1.ironPython调用1.1ironPython的安装IronP......
  • [hc32f460填坑] SystemCoreClock在进入main后变为0
    我的芯片型号是hc32f460jeua,使用的库为HC32F460_DDL_Rev3.1.0,keil包为HDSC.HC32F460.1.0.10。发现的问题:执行完SystemInit后SystemCoreClock为200000000,一进入mian函数就变为零。原因:__NO_INIT未起作用,__main对SystemCoreClock进行了初始化解决方法:1.把这两个勾上2,将Zero......
  • net-core认证和授权
    publicvirtualboolIsAuthenticated{get{return!string.IsNullOrEmpty(_authenticationType);}}登录代码:IList<Claim>calims=newList<Claim>();calims.Add(newClaim("name","ybd"));......
  • Ubuntu22.04 MySQL 8.0安装修改密码以及远程连接
    安装sudoapt-getinstallmysql-server-y卸载sudoaptpurgemysql-*sudorm-rf/etc/mysql//var/lib/mysqlsudoaptautoremovesudoaptautoclean`修改/etc/mysql/mysql.conf.d/mysqld.cnf配置文件重启:注释掉地址绑定:#bind-address=127.0.0.1#mysqlx-bind-a......
  • python:Error: EPERM: operation not permitted, mkdir 'F:\Program Files\nodejs\
     可以发现文件没有权限npmERR!Error:EPERM:operationnotpermitted,mkdir'F:\ProgramFiles\nodejs\node_global\node_modules'将nodejs的文件权限改为完全控制之后操作即可 ......
  • 3d打印机添加AI炒面检测服务 klipper+fluidd ubuntu本地部署TheSpaghttiDetective Ser
    炒面检测(TheSpaghettiDetective)介绍:炒面检测服务可以借助打印机的摄像头,检测打印是否炒面(打印失败)并作出提醒或停止打印的一种服务,该服务由服务器和客户端组成客户端支持两种: ocoprint或klipper服务器也有两种:ocobi官方提供的有限免费服务......
  • Linux shell command make & Makefile All In One
    Linuxshellcommandmake&MakefileAllInOne脚本自动化构建工具make&makefilehttps://linux.xgqfrms.xyz/linux_basic/1010index.htmmake第二十二章、1.3https://linux.xgqfrms.xyz/linux_basic/0520source_code_and_tarball.htm#intro_makemakefile第二十二章、......
  • MVC4 部署 could not load file or assembly system.web.http.webhost.....出错
    1.确保项目是.net4.0版本 2.如下图标出的部分,确保这个dll引用是项目本地,找到项目下的“引用”,找到对应的引用右键属性,将“复制本地”改为True,这里我们可以在项目下新建一个存入dll的文件夹,将这些dll放在这个文件夹里面,路径引用改为复制本地为True后就自动引用这个文件夹的路......