linux – 如何查看核心文件(一般)
作者:互联网
场景(Ubuntu 16.04):
我编译并运行一个C程序(使用-g,我得到传统的分段错误(核心转储),然后(当然)没有找到神秘的“核心”文件.有些挖掘说要修改/ proc / sys / kernel / core_pattern,其命令效果为:echo’| tee / home / me / my_core_folder / my_core_file’| sudo tee / proc / sys / kernel / core_pattern,执行此操作后,我停止获取(core dumped)和开始只获得普通的分段错误.我尝试了像gdb ./program_object_file.out core.pid这样的东西显然不存在(我变得绝望),当然还是尝试普通的gdb ./a.out后跟(gdb) )核心core.pid和命令的变体,我在垃圾邮件键盘上拼命试图让自动完成让我到达我需要的位置.
题:
有没有一种通用的方式我可以进入核心转储?我认识到我触摸的每台机器似乎都具有Michael Bay的变形金刚功能,可以重新配置硬件和软件,因此我所拥有的设备无法正常工作.是否有一个简单的算法/配方我可以在我自己的机器以及其他人的机器上找到核心转储?经过不少工作让我自己工作后,我总是发现自己在这样的东西上辅导朋友.能够运行一个命令或什么来将核心文件转储到运行可执行文件的目录中会很好…有没有办法做到这一点应该适用于大多数(我会选择“一些”)Linux / Unix机器?
解决方法:
core(5)
联机帮助页详细描述了影响核心转储的参数,包括命名等.
要回答您提出的问题,找不到核心转储没有通用的方法.默认情况下,如果允许进程在那里写入,如果在包含文件系统上有足够的空间,如果没有现有核心转储(在某些情况下),以及文件大小和核心,则将核心转储到进程的当前工作目录中文件大小限制(由ulimit或类似机制设置)允许它.但是/ proc / sys / kernel / core_pattern提供了许多不同的处理核心转储的方法,所以你真的需要查看它并找出正在发生的事情.
在你的情况下,我不知道为什么最初找不到核心,但我知道为什么你在设置重定向后停止获取核心:在core_pattern中使用管道时,必须使用绝对指定处理程序路径名.不会使用三通;你需要指定/usr/bin/tee.请注意,您应该特别注意多用户系统上的此类设置,因为运行以处理核心转储的程序是以root身份运行的.
在Debian衍生产品上,我安装了corekeeper
,它以易于使用的方式将核心转储写入/ var / crash下的每用户目录.
标签:c-3,linux,ubuntu,segmentation-fault,core-dump 来源: https://codeday.me/bug/20190813/1646807.html