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