(一)GDBdebug调试技术——coredump

2024-06-08 07:18

本文主要是介绍(一)GDBdebug调试技术——coredump,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.用户空间进程的内核转储:coredump
      • (1)ulimit相关指令
      • (2)在专用目录中生成内核转储
      • (3)自动压缩code dump文件
      • (4)启用Linux系统的内核转储功能
      • (5)code dump排除多余共享内存

1.用户空间进程的内核转储:coredump

(1)ulimit相关指令

查看当前的coredump功能是否有效;-c:表示coredump的大小限制,为0,表示无效
$ ulimit -c 
0不设置coredump文件的大小
$ ulimit -c unlimited设置coredump文件的大小的上限为1G
$ ulimit -c 1073741824
  • eg:codedump-test.c
#include <stdio.h>int main(void)
{int *a=NULL;*a=0x1;return 0;
}
  • gcc -g codedump-test.c -o codedump-test
$ ./codedump-test
Segmentation fault (coredumped)
  • 用gdb调试生成的coredump文件
coredump文件大小设置后,才会在编译链接的当前目录有coredump文件,即:下面的core
$ gdb -c core ./codedump-test解释:由于指针a的值是NULL,可以看出在访问NULL指针的时候,收到了信号。
在调试复杂程序的时候,从内核转储入手也十分有效
  • 结果如下在这里插入图片描述

(2)在专用目录中生成内核转储

  • 转储保存的完整路径,可以通过sysctl变量的kernel.core_pattern进行设置 (也可以通过(3)中的echo来修改)
kernel.core_uses_pid=0改变了文件名中PID的位置。若设置该值为1,则文件名末尾会添加.PID
$ cat /etc/sysctl.conf
kernel.core_pattern=/var/core/%t-%e-%c.core
kernel.core_uses_pid=0
$ sysctl -p生成coredump的时刻-进程名-PID-coredump的大小.core
$ ls /var/core
12223267175-a.out-2820-188446744073709551615.core
  • kernel.core_pattern可以设置的符号表如下:

在这里插入图片描述

(3)自动压缩code dump文件

$ echo "|/usr/local/sbin/core_helper" > /proc/sys/kernel/core_pattern
$ cat /etc/sysctl.conf
kernel.core_pattern=|/usr/local/sbin/core_helper %t %e %p %c
kernel.core_uses_pid=0
$ sysctl -p core_helper的内容是:
$ cat /usr/local/sbin/core_helper
#!/bin/bashexec gzip - > /var/core/$1-$2-$3-$4.core.gz$ ls /var/core
12223267175-a.out-2820-188446744073709551615.core.gz
echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

(4)启用Linux系统的内核转储功能

1./etc/initscript中写一个执行ulimit的脚本,若不行,则执行2
2.以Fedora9为例子
(a)首先编辑/etc/profile:
将 ulimit -S -c 0 > /dev/null 2>&1
修改为
ulimit -S -c unlimited > /dev/null 2>&1(b)让init脚本启动的守护进程中的coredump有效:
在/etc/sysyconfig/init文件中添加:DAEMON_COREFILE_LIMIT='unlimitted'(c)/etc/sysctl.conf中添加。默认情况下,该选项无效,还需要(2)在专用目录中生成内核转储
fs.suid_dumpable=1(d)最后重启Linux

(5)code dump排除多余共享内存

  • 由于各个共享内存的进程中,共享内存的内容是相同的,所以没必要所有进程都转存储
coredump_filter使用比特掩码表示内存类型
$ cat /proc/<PID>/coredump_filter
00000003要调过所有的共享内存区段,应将值改为1
$ echo 1> /proc/<PID>/coredump_filter
  • 比特4用于转储共享库或可执行文件等ELF格式文件,映射到的内存区段的第一页 (x86中为4KB)
    在这里插入图片描述

参考:《GDB/Debug.Hacks中文版:深入调试的技术和工具》

这篇关于(一)GDBdebug调试技术——coredump的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041510

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.