core dumped问题查找以及使用gdb、QT下gdbserver使用

摘要:
核心文件包含程序运行时的内存。可以理解,存储程序的当前状态以生成第一文件。当出现错误时,许多程序将生成一个核心文件。当程序异常退出时,我们可以找到相应的堆栈调用和其他信息。核心转储文件的存储位置核心文件的默认存储位置与相应的可执行程序位于同一目录中。

一,什么是coredump

        我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。

        通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。

二,coredump文件的存储位置

   core文件默认的存储位置与对应的可执行程序在同一目录下,文件名是core,大家可以通过下面的命令看到core文件的存在位置:

   cat  /proc/sys/kernel/core_pattern

   缺省值是core

三,coredump文件的生成

1、指定core dumped文件的生成路径

控制台输入命令:

/sbin/sysctl -w kernel.core_pattern=/home/james/workspace/bin/core_%t_%e_%p

%t - insert UNIX time that the coredump occurred into filename添加core文件生成时的unix时间

%e - insert coredumping executable name into filename添加类名

%p - insert pid into filename 添加pid(进程ID)

2、设定core dumped文件大小为不限制

控制台输入命令:

gedit ~/.bashrc

在该文件末尾加上:

ulimit -c unlimited

3.当程序意外退出时,查看core dumped文件

控制台输入命令:

gdb execute core_(dump file)

可以用tab键补全

回车键

where

查看导致推出的线程最后条用的函数栈。

四、QT及gdbServer的使用(本文是在PC完成)

目标机:(端口自定义)

gdbServer 192.168.1.119:1234  ./execute

宿主机:

QtCreator->调试(DeBug)->开始调试(Start Debugging)->关联到远程调试服务器(Attach to Remote Debug Server....)  进入到Start Debugger界面,

在服务器端口(Server Port)输入端口1234  

在Override srever address输入IP:192.168.1.119

在本地执行当(Local executable)选择可执行文件:execute

点击OK即可进行调试。

免责声明:文章转载自《core dumped问题查找以及使用gdb、QT下gdbserver使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySql计算两个日期的时间差函数推荐:Java性能优化系列集锦下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux file命令获取core文件所属进程问题

近期新系统测试时产生了大量core文件,把系统盘塞满了。 检测工具使用file命令,检测到某个进程的core文件数目大于3个,就把多余core文件删除,但是系统上线后,并没有删除多余的core文件。 原因在于 新OS系统中,file命令限制了解析program header数目,默认是128个,所以直接使用file命令看不到core文件对应的应用程序名称。...

Docker-Compose学习使用

1. 什么是docker-compose Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使...

实现Excel文件的上传和解析

前言 本文思维导图 一、需求描述 实现一个页面上传excel的功能,并对excel中的内容做解析,最后存储在数据库中。 二、代码实现 需求实现思路: 先对上传的文件做校验和解析,这里我们通过ExcelUtil工具类来实现; 解析得到的数据进行批量插入。 2.1 接口定义 @PostMapping(path = "/batchMaintainBa...

nodejs使用pkg打包

Node.js应用不需要经过编译过程,可以直接把源代码拷贝到部署机上执行,确实比C++、Java这类编译型应用部署方便。然而,Node.js应用执行需要有运行环境,意味着你需要先在部署机器上安装Node.js。虽说没有麻烦到哪里去,但毕竟多了一个步骤,特别是对于离线环境下的部署机,麻烦程度还要上升一级。假设你用Node.js写一些小的桌面级工具软件,部署到...

实战RPM包制作

  在开发中经常会用到一些rpm包,但是一直没有自己手动制作过。今天在制作的时候意外地还解决了自己以前一直困惑的问题,就是怎么制作rpm debuginfo包,类似CentOS官网那样的debuginfo包。原来在制作rpm时如果没有特殊设置就会在RPMS目录下同时生成rpm包及对应的debuginfo包。   下面总结一下制作rpm包的流程以及遇到的...

eclipse项目转android studio详解

第一步:项目导入   向AS中导入项目的方法有两种(其实是一种)。   方法一:是在eclipse中先导出为gradle(如图1),然后打开AS,找到项目中的gradle文件,直接导入。   方法二:直接在AS中找到项目,直接导入。(如图2)     图1                              图2   第二步:项目初始化   项目导...