list push_back *** 作导致程序Core,非必现

list push_back *** 作导致程序Core,非必现,第1张

你好!牛皮癣头皮、四肢伸侧多见,对称分布,初起为炎性红色丘疹,约粟粒至绿豆大小,以后逐渐扩大或融合成为棕红色斑块,边界清楚,周围有炎性红晕,基底浸润明显,表面覆盖多层干燥的灰白色或银白色鳞屑。牛皮癣的发病因素很多,目前的还不能根治,但是及时的选择适合的中药系统调理还是能够让皮屑消退,后期生活中一定要做好调整,尽可能的避免牛皮癣复发。°

什么是Core Dump

Core的意思是内存, Dump的意思是扔出来, 堆出来

开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped) 这时候可以查看一下有没有形如core进程号的文件生成, 这个文件便是 *** 作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考

core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由 *** 作系统把程序当前的内存状况存储在一个core文件中, 叫core dump

如何使用core文件

gdb -c core文件路径 [应用程序的路径]

进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中

为什么没有core文件生成呢

有时候程序down了, 但是core文件却没有生成 core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件

ulimit -c unlimited

core文件生成的位置一般于运行程序的路径相同, 文件名一般为core进程号

可以执行limit命令具体的取值,如下:

<75 sersrv1 [pisac10] :/home/pisac10>limit

cputime unlimited

filesize unlimited

datasize unlimited

stacksize unlimited

coredumpsize 4194303 kbytes

memoryuse unlimited

vmemoryuse unlimited

descriptors 1024

memorylocked unlimited

maxproc 69632

如果发现某些选项达不到要求,可以将这些放大

用gdb查看core文件:

下面我们可以在发生运行时信号引起的错误时发生core dump了

发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行

gdb [exec file] [core file]

如:

gdb /test testcore

在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件->行

如何知道一个core文件是哪个进程的:

使用file core文件命令就可以了,如下:

<63 sersrv1 [pisac10] :/home/pisac10>file core3118

core3118: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style, SVR4-style, from 'csser'

SUSE Linux *** 作系统可以使用kill -7 进程号 命令强制杀掉进程并且产生core文件

thread apply all where

通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。可以理解为把程序工作的当前状态存储成一个文件。许多程序和 *** 作系统出错时会自动生成一个core文件。

内存访问越界

a) 由于使用错误的下标,导致数组访问越界

b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符

c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串 *** 作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。

当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。最常出现的,几乎所有C程序员都出现过的错误就是“段错误”了。也是最难查出问题原因的一个错误。下面我们就针对“段错误”来分析core文件的产生、以及我们如何利用core文件找到出现崩溃的地方。

core文件创建在什么位置

在进程当前工作目录的下创建。通常与程序在相同的路径下。但如果程序中调用了chdir函数,则有可能改变了当前工作目录。这时core文件创建在chdir指定的路径下。有好多程序崩溃了,我们却找不到core文件放在什么位置。和chdir函数就有关系。当然程序崩溃了不一定都产生core文件。

什么时候不产生core文件

在下列条件下不产生core文件:

( a )进程是设置-用户-ID,而且当前用户并非程序文件的所有者;

( b )进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;

( c )用户没有写当前工作目录的许可权;

( d )文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。

利用GDB调试core文件,当遇到程序崩溃时我们不再束手无策。

以上就是关于list push_back *** 作导致程序Core,非必现全部的内容,包括:list push_back *** 作导致程序Core,非必现、如何分析core、如何排查大型C程序中的内存写越界导致的coredump等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9969973.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存