社区
Linux/Unix社区
帖子详情
UNIX线程共用一个变量,出现core dump
zshtiger2414
2009-11-19 05:26:58
在UNIX系统下,创建多线程,做了两个测试程序。
这两个测试程序中都用到线程访问全局变量,但是有一个程序core dump了,一个程序没有core dump,这是为什么啊?
请问哪个达人能帮忙啊?
...全文
158
9
打赏
收藏
UNIX线程共用一个变量,出现core dump
在UNIX系统下,创建多线程,做了两个测试程序。 这两个测试程序中都用到线程访问全局变量,但是有一个程序core dump了,一个程序没有core dump,这是为什么啊? 请问哪个达人能帮忙啊?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Caballeroo
2009-11-23
打赏
举报
回复
[Quote=引用 8 楼 zshtiger2414 的回复:]
引用 6 楼 caballeroo 的回复:
core dump 是代码segmentation fault时记录内存中数据的文件。
一般需要使用ulimit -c size,才会在代码异常时产生一个core文件。
你的代码应该有内存的非法写入等操作!
正象你说的那样子在程序中几个现成对对stderr进行了写入操作的时候出现了core dump!
这样的错误应该怎么样去避免啊?
[/Quote]
这种错误要是避免的话,完全靠平时写代码的注意点了!
zshtiger2414
2009-11-23
打赏
举报
回复
[Quote=引用 6 楼 caballeroo 的回复:]
core dump 是代码segmentation fault时记录内存中数据的文件。
一般需要使用ulimit -c size,才会在代码异常时产生一个core文件。
你的代码应该有内存的非法写入等操作!
[/Quote]
正象你说的那样子在程序中几个现成对对stderr进行了写入操作的时候出现了core dump!
这样的错误应该怎么样去避免啊?
一 铭
2009-11-21
打赏
举报
回复
这怎么说的准哦, 代码贴上来才知道
morris88
2009-11-21
打赏
举报
回复
把代码贴上来瞧瞧...
Caballeroo
2009-11-21
打赏
举报
回复
core dump 是代码segmentation fault时记录内存中数据的文件。
一般需要使用ulimit -c size,才会在代码异常时产生一个core文件。
你的代码应该有内存的非法写入等操作!
wuyu637
2009-11-19
打赏
举报
回复
如果两个线程都同时往里写,是会有问题的。
你可以先申明一个和那个全局变量一样,只有名字有差异的副本,让其中一个线程,访问副本,另外一个线程访问原来的变量,如果程序不会奔溃,就说明是同步的问题。
或者就直接点用简单的同步方法,mutex_lock之类的,防止这种情况
zshtiger2414
2009-11-19
打赏
举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
应该是其它的原因。
仅仅因为两个线程访问同一个变量不至于core dump,线程之间共享的东西还多着呢。
[/Quote]
我看了一下程序,真的就是因为程序用fprintf向stderr写东西的时候,因为系统内部调用pthread_mutex_lock函数出错了。
是不是因为这种加锁就可以使得在向某个变量写的时候,就会出现错误啊?
Wenxy1
2009-11-19
打赏
举报
回复
用gdb调试下。
晨星
2009-11-19
打赏
举报
回复
应该是其它的原因。
仅仅因为两个线程访问同一个变量不至于core dump,线程之间共享的东西还多着呢。
启动GDB调试、
core
dump
一个
指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结构或类型的指针,而应该将这段内存拷贝到
一个
这种结构或类型中,再访问这个结构或类型。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。不要使用大的局部
变量
(因为局部
变量
都分配在栈上),这样容易造成堆栈溢出,破坏系统的栈和堆结构,导致
出现
莫名其妙的错误。b) 随意使用指针转换。
Linux 中
core
dump
异常的分析
在
UNIX
系统中,常将“主内存称为核心(
core
),因为在使用半导体作为内存材料之前,便是使用核心(
core
)。而核心映像(
core
image)就是 “进程”(process)执行当时的内存内容。当进程发生错误或收到 “信号”(signal)而终止执行时,系统会将核心映像写入
一个
文件,以作为调试之用,这就是所谓的核心转储(
core
dump
)。
Core
dump
是指在程序异常终止时,操作系统将程序的内存映像保存到磁盘上的一种机制。
GDB调试
core
dump
如何通过
core
dump
文件来定位错误代码
GDB 调试与
Core
Dump
分析技术
GDB(GNU Debugger)是 Linux/
Unix
系统中最常用的程序调试工具,可用于 C/C++、汇编等语言的程序调试,能帮助开发者定位运行时错误、查看内存状态、跟踪程序执行流程。GDB 调试与
Core
Dump
分析是软件开发中定位运行时错误的核心技术,前者用于动态调试,后者用于事后分析,两者结合可高效解决复杂的程序崩溃问题。
Core
Dump
是程序崩溃时系统生成的内存镜像文件,记录了进程崩溃时的内存状态、寄存器值、调用栈等信息,可用于事后分析错误原因。:调试
一个
段错误程序。
Linux 下的
Core
dump
(一)
作为
一个
之前一直混迹于windows系统下的人来说,
core
dump
是比较陌生的,那么到底什么是
core
dump
呢?怎么样会产生
core
呢?程序出
core
后要如何调试呢?下面来简单介绍一下。 一、什么是
core
dump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在
一个
Core
文件中,这种行为就叫做
Core
Dump
(核心转储)。(这里的
core
就是沿用的
Linux/Unix社区
23,224
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章