ubuntu18/20 下如何生成core文件

ubuntu18/20 下如何生成core文件

一、设置

原理:https://blog.youkuaiyun.com/Sunnyside_/article/details/118439302

原来在ubuntu14,ubuntu16上只需要一步就能生成core文件.
$ ulimit -c unlimited

但是ubuntu18, ubuntu20 启用了systemd 系统管理, 想要开启生成core文件,
需要3步, 前面2步是铺垫.

  1. 设置core 文件的格式
  gedit /etc/sysctl.conf 

在底部加上如下2行, 设置生成的core文件格式, 你也可以设置成简单格式

#%e-execute name, %p-process %s-siganl that cause coredump
kernel.core_pattern=core-%e-%p-%t-%s

或者临时更改,可以直接设置

echo "core-%e-%p-%t" > /proc/sys/kernel/core_pattern
  1. 禁用apport 服务, 有这个服务运行还是不能生成core 文件
    $ sudo systemctl disable apport.service

  2. 然后就可以像以前一样打开或关闭core 文件了.
    用 $ ulimit -c unlimited 来打开core dump 文件

使用命令查看相关信息

unlimt -a 

参考:https://blog.youkuaiyun.com/hejinjing_tom_com/article/details/121908482

参考1:http://t.csdn.cn/MIfw0

更改/etc/security/limits.conf 并不起作用!!!更改profile也不起作用,真实崩溃!

Ubuntu下图形登录后非图形登录的配置文件是不的,/etc/security/limits.conf只是在非图形登录情况下有效。

有人说需要更改:

图形登录情况下需要修改/etc/systemd/user.conf/etc/systemd/system.conf中如下面这行的配置项(这将处理图形登录)

但是我发现不能使用*,需要设置为具体的用户名,ubuntu可能做的不细致,

root               soft    core            4194304
root               hard    core            4194304

重启!!!!!

ulimit -a

core file size          (blocks, -c) 4194304
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31382
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31382
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


二、应用

示例代码:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    pid_t pid = fork();
    if(pid < 0)
    {
        perror("创建失败\n");
        return 0;
    }
    else if(pid == 0)
    {
        //子进程
        int * p = NULL;
        *p = 20; //解引用空指针,这里会出错
        while(1)
        {
            printf("i am child pid=[%d] ppid=[%d]\n",getpid(),getppid());
            sleep(1);
        }       
    }
    else
    {
        //父进程pid > 0
        printf("begin ---> i am father pid=[%d] ppid=[%d]\n",getpid(),getppid());
        int status;
        wait(& status); //父进程在等待子进程的退出 

        printf("sig_code : %d\n",status & 0x7F); //获取进程终止信号
        printf("coredump_code:%d\n",(status >> 7) & 0x1); //获取 coredump 标志位

        //父进程应该在等待,等待子进程退出,退出后才会进入下面这个循环 
        while(1)
        {
            printf("end ---> i am father pid=[%d] ppid=[%d]\n",getpid(),getppid());
            sleep(1);
        }
    }
    return 0;
}



编译时候需要添加调试信息

gcc coretest.cpp -o coretest -g
./coretest
ctrl + C

产生一个core 文件 core-coretest-2352-1655862503-11,

需要使用gdb定位并调试:

root@ubuntu:/robin2/tracer# gdb ./coretest core-coretest-2352-1655862503-11
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./coretest...
[New LWP 2352]
Core was generated by `./coretest'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000056178e89d28e in main () at coretest.cpp:19
19	        *p = 20; //解引用空指针,这里会出错
(gdb) 


<think> 我们正在寻找在Ubuntu系统的Wayland环境下,位于/etc目录中用于配置DRM(Direct Rendering Manager)的文件。 根据Linux系统的一般配置和Wayland/Weston的相关知识: 1. DRM是Linux内核中直接管理显示设备的子系统,通常不需要在/etc下有特定的配置文件。其配置更多是通过内核参数或模块参数实现。 2. 在Wayland环境下,显示服务器(如Weston)会使用DRM后端。对于Weston,其配置文件可以设置DRM相关的选项,而Weston的配置文件通常位于: - /etc/xdg/weston/weston.ini (系统级配置) - 用户家目录的 ~/.config/weston.ini 3. 但是,用户可能还使用了其他Wayland合成器(如GNOME的Mutter,KDE的KWin等),这些合成器可能有自己的配置方式,通常不在/etc下直接配置DRM。 4. 另外,与DRM相关的用户空间库的配置(如libdrm)通常也不在/etc下,因为libdrm是一个库,它通过内核接口与DRM交互,其配置通常通过环境变量或编译选项。 5. 在/etc下,与图形显示相关的配置可能包括: - 环境变量设置:例如在/etc/profile、/etc/environment或/etc/profile.d/下的脚本中设置环境变量,这些环境变量可能影响DRM的行为(如指定使用的DRM设备)。 - udev规则:在/etc/udev/rules.d/目录下,可能存在与DRM设备相关的规则,用于设置设备权限或触发某些动作。 6. 特别地,对于多GPU系统,可能需要配置Xorg或Wayland使用特定的GPU,但Wayland合成器通常通过环境变量(如WESTON_DRM_DEVICE)来指定DRM设备。例如,在/etc/profile.d/下的某个脚本中设置: export WESTON_DRM_DEVICE=/dev/dri/card1 7. 另外,用户提到的引用[1]中有一个env.sh文件,位于/etc/profile.d/env.sh,其中设置了与Wayland相关的环境变量,包括: export WESTON_DRM_MIRROR=1 export WESTON_DRM_KEEP_RATIO=1 这些环境变量会影响Weston的DRM后端行为。 8. 因此,我们可以得出结论:在Ubuntu的Wayland环境下,没有专门用于配置DRM的单一文件。但是,与DRM相关的配置可能出现在: - Weston的配置文件:/etc/xdg/weston/weston.ini (如果使用Weston) - 环境变量配置文件:/etc/profile, /etc/environment, /etc/profile.d/*.sh - udev规则文件:/etc/udev/rules.d/*.rules 9. 如果用户使用的是GNOME或KDE等桌面环境,则DRM配置通常由桌面环境内部处理,不提供用户配置文件。但是,可以通过设置环境变量来影响行为,例如: export __GL_DEBUG=1 (用于调试NVIDIA驱动) 10. 另外,对于NVIDIA专有驱动,可能有自己的配置文件,但通常不在/etc下,而是在/usr/share/X11/xorg.conf.d/或/etc/X11/下(但X11的配置不直接影响Wayland)。 因此,回答用户问题:在Ubuntu Wayland环境下,/etc目录中没有专门用于配置DRM的独立文件。但是,可以通过以下文件间接影响DRM行为: - Weston合成器的配置文件(如果使用Weston): `/etc/xdg/weston/weston.ini` - 环境变量配置文件: `/etc/profile` `/etc/environment` `/etc/profile.d/` 目录下的脚本(如引用[1]中的`env.sh`) - udev规则: `/etc/udev/rules.d/*.rules` 如果用户想修改DRM相关的行为,需要根据他们使用的Wayland合成器来具体配置。 生成的相关问题: 1. 如何在Ubuntu Wayland环境下配置Weston使用特定的DRM设备? 2. 如何设置环境变量来影响DRM在Wayland下的行为? 3. 在Ubuntu上使用Wayland时,如何调试DRM问题? 4. 如何为多GPU系统配置Wayland合成器使用指定的显卡? </think> 在 Ubuntu 系统的 Wayland 环境下,配置 DRM (Direct Rendering Manager) 主要通过以下文件实现: ### 核心配置文件 1. **Weston 配置文件** `/etc/xdg/weston/weston.ini` 这是 Wayland 合成器 Weston 的主配置文件,包含 DRM 后端的关键设置: ```ini [core] backend=drm-backend.so # 指定使用DRM后端 [drm] mode=1920x1080@60 # 显示模式配置 format=XR24 # 像素格式 seat=seat0 # 输入设备关联 ``` 通过该文件可配置: - 显示分辨率/刷新率 - GPU 设备选择(多 GPU 场景) - 色彩空间和 HDR 参数[^1] 2. **环境变量配置文件** `/etc/profile.d/*.sh`(如引用[1]中的 `env.sh`) 包含影响 DRM 行为的全局环境变量: ```bash export WESTON_DRM_MIRROR=1 # 启用显示镜像 export WESTON_DRM_KEEP_RATIO=1 # 保持显示宽高比 export LIBVA_DRIVER_NAME=i965 # 指定VA-API驱动 ``` ### 辅助配置文件 3. **Udev 规则文件** `/etc/udev/rules.d/*.rules` 控制 DRM 设备节点的权限和命名规则: ```bash # 示例:设置显卡设备权限 KERNEL=="card[0-9]*", SUBSYSTEM=="drm", MODE="0660", GROUP="video" ``` 4. **Modetest 工具配置** `/usr/share/libdrm/*.json` 包含显示模式测试的描述文件(需安装 `libdrm-tests` 包) ### 验证配置 通过 `weston-info` 检查 DRM 配置状态: ```bash $ weston-info interface: 'wl_drm', version: 2 device: /dev/dri/card0 # 当前使用的DRM设备 capabilities: prime_export # 支持的DRM特性 ``` ### 相关调试工具 | 工具 | 功能 | 安装命令 | |---------------|--------------------------|----------------------------| | `modetest` | 测试显示模式 | `apt install libdrm-tests` | | `igt-gpu-tools` | DRM 底层调试 | `apt install igt-gpu-tools`| | `glxinfo` | OpenGL 状态检查 | `apt install mesa-utils` | --- ### 相关问题 1. 如何在多显卡系统中指定 Weston 使用特定 GPU? 2. DRM 和 X11 的配置差异有哪些? 3. Wayland 环境下如何强制启用 HDR 支持? 4. 调试 DRM 权限问题(如 `/dev/dri/card0` 不可访问)的最佳实践? [^1]: Weston 的 DRM 后端配置文档:https://gitlab.freedesktop.org/wayland/weston/-/blob/main/doc/drm-backend.md
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值