Linux QT coredump

本文详细介绍了如何使用`ulimit`调整核心转储限制,以及在程序崩溃时通过GDB进行调试。讲解了GDB的基本命令,如`list`、`break`、`print`、`run`等,以及常见的信号类型,如SIGABRT和SIGSEGV。还提到了在shell脚本中启动的程序如何进行调试。此外,讨论了coredump的存储位置和命名规则,以及如何通过调整`/proc/sys/kernel/core_pattern`来定制core文件的生成。最后,推荐了矢量图设计软件Inkscape。
摘要由CSDN通过智能技术生成

ulimit -c   查看限制

ulimit -c unlimited 解除限制

运行可执行程序,若奔溃则产生core文件。

 通过指令:gdb gdbcdtest core  来打开core文件

如果存在core找不到的情况,可能是没配置core生成的默认路径。

---------------------------------------------------------------------------------------------------------------------------------

常用的gdb命令:

l(list) ,        显示源代码,并且可以看到对应的行号;

b(break)x,    x是行号,表示在对应的行号位置设置断点;

p(print)x,      x是变量名,表示打印变量x的值

r(run),          表示继续执行到断点的位置

n(next),        表示执行下一步

c(continue), 表示继续执行

q(quit),      表示退出gdb
 

常用signal的含义

SIGABRT:调用abort函数时产生此信号。进程异常终止。

SIGBUS:  指示一个实现定义的硬件故障。

SIGEMT:  指示一个实现定义的硬件故障。EMT这一名字来自PDP-11的emulator trap 指令。

SIGFPE:  此信号表示一个算术运算异常,例如除以0,浮点溢出等。

SIGILL:    此信号指示进程已执行一条非法硬件指令。4.3BSD由abort函数产生此信号。SIGABRT现在被用于此。

SIGIOT:   这指示一个实现定义的硬件故障。IOT这个名字来自于PDP-11对于输入/输出TRAP(input/outputTRAP)指令的缩写。系统V的早期版本,由abort函数产生此信号。SIGABRT现在被用于此。

SIGQUIT:当用户在终端上按退出键(一般采用Ctrl-/)时,产生此信号,并送至前台进

程组中的所有进程。此信号不仅终止前台进程组(如SIGINT所做的那样),同时产生一个core文件。

SIGSEGV:指示进程进行了一次无效的存储访问。名字SEGV表示“段违例(segmentationviolation)”。

SIGSYS:   指示一个无效的系统调用。由于某种未知原因,进程执行了一条系统调用指令,但其指示系统调用类型的参数却是无效的。

SIGTRAP:指示一个实现定义的硬件故障。此信号名来自于PDP-11的TRAP指令。

SIGXCPUSVR4和4.3+BSD支持资源限制的概念。如果进程超过了其软C P U时间限制,则产生此信号。

SIGXFSZ:如果进程超过了其软文件长度限制,则SVR4和4.3+BSD产生此信号。

---------------------------------------------------------------------------------------------------------------------------------

如果程序是通过shell脚本打开,不能再用gdb ./xxx.sh core来进行调试,不然定位不到问题。只能使用程序名称进行调试。

目前用的Qt6.2.试了再代码中加:

#QMAKE_CC += -g
#QMAKE_CXX += -g
#QMAKE_LINK += -g

没发现产生的core有啥区别。没有这个代码依然能通过core找到源码。

---------------------------------------------------------------------------------------------------------------------------------

关于coredump存储位置问题

echo 是向窗口输出脚本。

echo "$dirname/coredump.%e.%p" > /proc/sys/kernel/core_pattern

产生的core文件需要可执行程序一起。不然也定位不到错误位置。

这里记录一个矢量图设计软件www.inkscape.org

目前各个平台都行。

参考文章:详解coredump_tenfyguo的技术专栏-CSDN博客_core文件一,什么是coredump        我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。        通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆https://blog.csdn.net/tenfyguo/article/details/8159176

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值