首页 > 技术文章 > core dumped问题查找以及使用gdb、QT下gdbserver使用

wanzaiyimeng 2017-04-14 18:35 原文

一,什么是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即可进行调试。

推荐阅读