g-gdb调试core文件
文章目录
- core文件
- 判读是否为core文件
- 打开系统 core dump
- 修改core文件的保存路径
- gdb调试core文件
最近初步了解了一下core 文件,已经如何将gdb工具与core文件结合调试出现段错误的程序
core文件
core
是指操作系的程序统核心。当我们的程序在操作系统上运行异常崩溃时,操作系统会将此时系统内存状态报存下来,放入一个core文件,这个过程叫做core dump
,也即是核心转储。该过程可以理解为操作系统对内存的快照,保存的内容除了基本内存信息之外还包括寄存器信息(程序指针,栈指针),内存管理信息,程序运行状态信息等。core
文件能够快速帮助开发者定位出很难发现的程序异常问题。
判读是否为core文件
一般core文件是以core
开头的,
- 使用命令
readelf
读取存储该文件的的elf加载表头信息,其中包含core file
的信息
readelf -h /tmp/core-hcli-17503-1556000117
ELF Header:Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: CORE (Core file) #文件类型为core文件 Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x0 Start of program headers: 64 (bytes into file) Start of section headers: 0 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 112 Size of section headers: 0 (bytes) Number of section headers: 0 Section header string table index: 0
- 使用
file
命令也可以看到core属性
file /tmp/core-hcli-17503-1556000117 |grep core
/tmp/core-hcli-17503-1556000117: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from '/b_iscsi/bn_cli/hcli ceph disk add --name ceph -s abcdef -l 10.192.55.180 INTEL'
打开系统 core dump
使用命令ulimit -c [blocks]
ulimit -c
查看当前系统core文件的大小限制[root@node1 ~]# ulimit -c0
这个时候操作系统的
core dump
是关闭的,此时如果当前系统程序异常终止也不会生成core文件ulimit -c 1024
限制当前系统的core文件大小为1024(blocks)
,记住这里的blocks为操作系统块大小,一般默认为512B
,即这里限制core文件大小不超过1024 * 512 B
ulimit -c unlimited
对操作系统生成的core文件大小不做限制使用以上命令打开core dump只会对当前终端有效,如果想要永久生效,需要更改
core dump
配置文件如下:
vim /etc/security/limits.conf
增加如下内容#Each line describes a limit for a user in the form: # #<domain> <type> <item> <value> # #下面一行位置为我增加的 #第一列<domain>为用户限制 #第二列<type>为修改限制的类型是软件还是硬件,这里因为是内核相关文件,则是soft #第三列<item>为文件属性 #第四列<value>对属性具体限制的数值 * soft core unlimited
使以上配置文件生效需确保PAM认证配置文件中添加
pam_limits.so
库,同时sshd
的登录服务配置中PAM模块状态为启用USEPAM yes
#确保ssh服务启动是会加载PAM认证模块 cat /etc/ssh/sshd_config|grep UsePAM UsePAM yes
同时在如下配置文件中加入PAM的limits库
#在centos下该库是在lib64目录下,如果该配置中存在加载该库的语句则不用添加 vim /etc/pam.d/login session required /lib64/security/pam_limits.so
以上配置正常的话只需要重新登录一下终端,
/etc/security/limits.conf
中的修改即可生效,我们在ulimit -c
中可以看到更改过的结果,且该结果对任何登录终端都生效。
修改core文件的保存路径
- 默认生成的
core
文件保存在可执行文件路径下,文件名即为core
- 通过修改
/proc/sys/kernel/core_uses_pid
文件让core文件名自动加上进程的pid号变为core.pid
执行echo 1 > /proc/sys/kernel/core_uses_pid
- 修改
/proc/sys/kernel/core_pattern
修改core文件的文件名和生成路径
执行命令echo "/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
则将生成的core文件目录放在/tmp
目录下,同时文件名为core-命令名-pid-时间
#如下文件 /tmp/core-ceph_osd_daemon-10089-1556277405 /tmp/core-ceph_osd_daemon-13233-1556352109 /tmp/core-ceph_osd_daemon-14787-1556276292 /tmp/core-ceph_osd_daemon-17754-1556275923
gdb调试core文件
- 使用
gdb 可执行文件绝对路径 core文件路径
进行调试,如下
gdb /root/ceph_osd_daemon /tmp/core-ceph_osd_daemon-22685-1556352590
进入调试终端,输入bt
即可打印程序异常的函数调用栈,使用list + 异常函数
或者list + 代码行号
查看出错源码位置,如果还想要继续进行代码断点以及变量跟踪,则可以进一步调试。使用gdb 可执行文件绝对路径
,进行b line
设置断点进行单步调试[root@node1 ~]# gdb /root/ceph_osd_daemon /tmp/core-ceph_osd_daemon-22685-1556352590 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-51.el7 Copyright (C) 2013 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-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /root/ceph_osd_daemon...done. [New LWP 22685] Core was generated by `/root/ceph_osd_daemon'. Program terminated with signal 11, Segmentation fault. #0 0x00007f086dadd76b in __strcmp_sse42 () from /lib64/libc.so.6 #我这里系统的libc库版本较低,所以debuginfo要求需要安装高版本C库即可 Missing separate debuginfos, use: debuginfo-install glibc-2.17-222.el7.x86_64 (gdb) bt #查看函数调用栈 #0 0x00007f086dadd76b in __strcmp_sse42 () from /lib64/libc.so.6 #1 0x00000000004041f3 in get_min_value (buff=0x7fffaa8fe700 "14 2", p_infos_a=0x7fffaa8fe300) at ceph_osd_daemon.c:970 #2 0x000000000040464c in get_max_out_num (osds=0x7fffaa8fea90) at ceph_osd_daemon.c:1033 #3 0x0000000000404e97 in ceph_daemon_exec () at ceph_osd_daemon.c:1180 #4 0x000000000040501b in main (argc=1, argv=0x7fffaa902db8) at ceph_osd_daemon.c:1221 (gdb) list 970 #查看出错的源代码位置 965 for (i=0; NULL != p_infos_a[i]; i++){ 966 //for (i=0; i < pool_flag - 1 && NULL != p_infos_a[i]; i++){ 967 //for (i=0; i < pool_flag && strlen(p_infos_a[i]); i++){ 968 //printf("<fldb> line:%d\n",__LINE__); 969 printf("<fldb> i:%d\n",i); 970 if (!strcmp(p_infos_a[i]->pool_id,tmp_id)) { 971 strcpy(p_infos_a[i]->min_size,tmp_redu); 972 } 973 } 974 return;
相关文章:

信息整合的讨论案例
我所在的公司是广州的一个大型国有企业,目前所用的信息管理系统包括企业管理的方方面面,大约有7到8个互相独立的信息系统,这些系统都是在7、8年前就已经投入使用了,完全自主开发和维护,所用的工具是delphi+…

html中sprite标签,Three.js模型标签
Three.js模型标签在很多的实际的项目中,你可能需要给一个Three.js的模型添加标签,标签可以通过一个包含文字图形信息的HTML元素或者一个three.js的精灵模型来表示。层级模型复杂的项目,一个three.js场景往往包含包含多个模型对象,…

D3D11中的硬件反锯齿 SSAA/MSAA/EQAA/CSAA(3)
五 、EQAA/CSAA EQAA(enhanced quality AA)和CSAA(coverage sample AA)其实是同样的采样技术,EQAA是AMD的实现,CSAA是NV的实现,下面我以EQAA为例看看这两种AA的原理: 在MSAA中,每个采样都有一个sample color缓冲相对应…

[ python ] 类的组合
首先,使用面向对象是一个人狗大战的实例: class Person:def __init__(self, name, hp, aggr, sex):self.name nameself.hp hpself.aggr aggrself.sex sexdef hit(self, dog):dog.hp - self.aggrprint(\033[31;1m%s被打,掉了%s的血.\033[0…

ceph nautilus相对于minic的主要改动
改动信息 详情可以查看ceph官网nautilus Dashboard功能 增加的新功能 支持多用户使用SSO的用户验证模式支持审计模式新的登录页,可以展示更多的集群健康指标使用swagger api的rest api文档 增加的新的管理特性 对于OSD的管理(将osd标记为down,out,修…

word2003计算机应用考试,2017职称计算机考试Word2003操作练习题
2017职称计算机考试Word2003操作练习题实验操作能力是计算机考试考查的一项基本能力,下面是小编给大家提供的职称计算机考试Word2003操作练习题,大家可以参考练习,更多习题练习请关注应届毕业生考试网。1. 将所选文本的字体设置为“华文彩云”…

虚拟化及云厂商聚焦
虚拟化及云厂商聚焦转载于:https://blog.51cto.com/itcn001/1069736

题解:无线通讯网
qwq 跑最小生成树 一共n个电话,所以相当于最小生成树里删去最大的n-1的边 所以答案即为最小生成树的第n大边 prim或者kruskal都行 这是prim 1 #include<iostream>2 #include<cstdio>3 #include<algorithm>4 #include<cmath>5 using namespa…

linux常用操作指令—— 查看磁盘、内存使用情况(df、du、free、top)
显示指定磁盘文件的可用空间。如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。当文件系统也确定删除了该文件后,这时候du与df就一致了。实例4:显示目前磁盘空间和使用情况 (最常用)top:“实时查看” ,按。退出 (实时动态显示)

广东电网计算机考试,考点爆料!2019广东电网计算机专业居然考这些!
原标题:考点爆料!2019广东电网计算机专业居然考这些!本文由广东中公国企为您整理:2019广东电网校园招聘预计于2018年10~11月份开启,计算机类也是其中一个招聘大类,那么2019广东电网校园招聘计算机类专业考什…

修改ceph crush map,并指定到资源池
版本:ceph L 版本 12.2.1 环境:单节点 15 osd -1 0 root default -3 94.53119 host node1 0 hdd 5.37108 osd.0 up 1.00000 1.00000 1 hdd 5.37108 osd.1 …

常见的七种加密算法及实现
**数字签名**、**信息加密** 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、`oauth` 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 **签名加密算法** 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。## 正文### 1. 数字签名**数字签名**,简单来说就是通过提供 **可鉴别** 的 **数字信息** 验证 **自身身份** 的一种方式。一套 **数字签名** 通常定义两种 **互补

MySQL慢查询日志slowlog
慢速查询日志记录的是执行时间超过秒和检查的行数超过的SQL语句,这些语句通常是需要进行优化的。官方参考文档:https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html。

Ubantu下hadoop运行第一个例子wordcount过程
Ubantu12.04下hadoop-1.2.1运行第一个例子wordcount过程,分享一下 将WordCount.java文件放在Hadoop安装目录下,并在安装目录下创建输入目录input,目录下有输入文件file1,file2,其中: file1内容:…

jsp - EL
E L(Expression Language) 作用:能够用于在 JSP 文件中嵌入 Java 代码的表达式语言,替代小脚本 1、语法结构 ${expression} 2、 EL 提供“.“和“[ ]“两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如…

node 常用指令 node 扩展链接
node -v node 版本 npm -v npm版本号,npm是在安装nodejs时一同安装的nodejs包管理器 (注册、安装模块,和小乌龟有点像) npm list 当前目录已安装插件 npm list -g 查看所有全局安装的模块: npm…

增加内核的ceph模块的日志打印
本文主要是在梳理cephfs内核方式挂载的内核代码逻辑所做的准备 环境:Centos 7.5 内核源码版本:3.10.0-862.el7.x86_64 打开ceph模块的debug信息 单独编译ceph模块的.ko文件 ceph在内核的通用模块主要有三个: ceph.ko 模块路径:/usr/src/k…

计算机系统安装和维护实验,2计算机系统安装维护实验报告.doc
2计算机系统安装维护实验报告计算机系统安装维护实验报告院系: 班级: 姓名: 学号:【实验目的】学习了解u盘硬盘启动维护系统【实验内容】通过GHOST11软件进行系统的相关操作用户可以通过GHOST11软件进行硬盘对拷,分区对拷…

Javascript年月日联动
代码 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">2 <html>3 <head>4 <title> New Document </title>5 <meta name"Generator" content&…

emmmmmm(官宣?)
实验室永远不会是学习的唯一地点,不是吗? 总后悔当初退竞赛,现在却还是选择退出,大概是自己真的不适合吧。。。转载于:https://www.cnblogs.com/LOW-ctfer/p/9896781.html

ceph unfound object问题的解决
查看丢失对象的pg id ceph health detail 查找该pg下丢失的object ceph pg 8.32 list_missing 尝试修复该pg: ceph pg repair 8.32 ceph pg scrub 8.32 修复不成功的话,可以直接告诉ceph使用已有的版本或者直接删除 尝试切换到旧版本的object:ceph pg 8.32 mark_…

Apache ‘mod_pagespeed’模块跨站脚本漏洞
漏洞名称:Apache ‘mod_pagespeed’模块跨站脚本漏洞CNNVD编号:CNNVD-201310-677发布时间:2013-11-05更新时间:2013-11-05危害等级: 漏洞类型:跨站脚本威胁类型:远程CVE编号:CVE-20…

设备漏电对计算机影响,电脑机箱漏电对电脑有影响吗
电脑机箱漏电一般原因是长期使用在潮湿或高温环境下,电源线或主板的裸露部件因绝缘下降或积灰受潮等原因,接地电转载自电脑百事网容轻微损坏;这时,机箱的带电感觉较明显,有时用试电笔也能点亮。这种情况就要引起注意了…

eoiioe IE 和 firefox js 兼容问题
1、判断浏览器类型 1var ver"IE6";2if (window.XMLHttpRequest)3 ver (!window.ActiveXObject) ? "Mozilla or Safari" : "IE7"; 4return ver;2、获取位置,在firefox中,无法使用object.style.pixelLeft,只…

团队博客(第四周)-“名字好难想”
一,已完成工作 1.美术资源设计完毕 2.界面设计完毕 3.客户端登录程序实现 二,待完成工作 1.服务器的实现 2.等待界面和战斗场景的脚本实现 三,遇到的困难 1.程序事情有点多,没有配合好美术完成功能 四,燃尽图 五&#…

ceph rados命令使用
文章目录Pool相关Object相关导出资源池数据最近了解了rados命令的使用,感觉在对象操作这块还是非常实用。因为rados是属于底层存储核心,所以关于rados的命令针对对象的操作较多。环境中执行 rados -h可以看到命令集分为几个大的模块:资源池、…

前置体验,才是打动用户的神器
在上一篇文章《记住,用户只愿为“体验”付钱》中,我谈到了体验经济和根据体验定价的逻辑,以及一些商业案例,它们共同展现了一种趋势,即用户愿意为体验付钱。同理,在这样的大背景下,互联网产品该…

服务器ip 计算机名,服务器计算机名称或者ip地址
弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情区域和可用…

mysql的常用函数
一、数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e(自然…

NOIP模拟题 斐波那契数列
题目大意 给定长度为$n$序列$A$,将它划分成尽可能少的若干部分,使得任意部分内两两之和均不为斐波那契数列中的某一项。 题解 不难发现$2\times 10^9$之内的斐波那契数不超过$50$个 先求出第$i$个数之前最后一个能和第$i$个数相加为斐波那契数的位置$las…