免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1865 | 回复: 5
打印 上一主题 下一主题

[C++] 关于coredump中打印出来的“_malloc_unlocked” [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-09 16:33 |只看该作者 |倒序浏览
被一个问题困扰了很久:
是关于solaris上面C++的一个coredump。
把core文件的调用栈打印出来如下, 最后一个调用是“_malloc_unlocked”, 这个是标准库里面的东西,对应的代码也就是初始化了一个ifstream对象。

网上google了半天, 说这个是内存哪里出错了; 但是根据这个调用栈,似乎无法定位问题所在。
也就是说最后出问题的地方是初始化ifstream的地方,但是这里的代码并没有错误,是其他不知道什么地方的内存操作有问题,只是刚好到ifstream这里core了。

不知大神们有何看法?
我主要是想确认这个调用栈是否可以定位到哪里内存操作错误?或者还有其他什么办法来定位?
谢谢!!!!

调用栈:
Loading modules: [ libc.so.1 libuutil.so.1 ld.so.1 ]
> ::stack
libc.so.1`_malloc_unlocked+0x164(2008, 0,4b08900, ff, ffffffff, ff)
libc.so.1`malloc+0x4c(2001, 1, ea714, 0, fedb23e8, fedbc5d
libCrun.so.1`__1c2n6FI_pv_+0x28(2001, 0, 0, 15d74, fee8cd10, 0)
libCstd.so.1`__1cDstdNbasic_filebuf4Ccn0ALchar_traits4Cc___Eopen6Mpkcil_p1_+0xc0(ffbfcec8,ab800, 2000, 1b6, ffbfcec8, 0)
libCstd.so.1`__1cDstdObasic_ifstream4Ccn0ALchar_traits4Cc___Eopen6Mpkcil_v_+0x88(ffbfceb8,ab800, 4, 1b6, 78, 89004)
libCstd.so.1`__1cDstdObasic_ifstream4Ccn0ALchar_traits4Cc___2t6Mpkcil_v_+0x9c(ffbfceb8,ab800, 4, 1b6, 320, ffbfcec

libcmLogclnt.so`__1cUDConfiguratorImplCVdoConvertAndConfigure6MrknDstdMbasic_string4Ccn0BLchar_traits4Cc__n0BJallocator4Cc_
...


对应的代码:
        std::ifstream initFile(initFileName.c_str());
        if (!initFile)
          {

                throw log4cpp::ConfigureFailure(std::string("File " + initFileName + " does not exist";
           return;
        }


论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
2 [报告]
发表于 2016-10-09 16:59 |只看该作者
定义一个 ifstream 就会 core 掉,这个没见过。。。

论坛徽章:
0
3 [报告]
发表于 2016-10-09 17:05 |只看该作者
是啊,从调用栈看, DConfiguratorImpl是我们的自己写的代码,接下来一层就是“basic_ifstream”, 对应到代码就是那一句。 所以有点晕了。。。如果是代码其他部分的问题,似乎就没有什么办法来追踪了。。。

调用栈:
Loading modules: [ libc.so.1 libuutil.so.1 ld.so.1 ]
> ::stack
libc.so.1`_malloc_unlocked+0x164(2008, 0,4b08900, ff, ffffffff, ff)
libc.so.1`malloc+0x4c(2001, 1, ea714, 0, fedb23e8, fedbc5d
libCrun.so.1`__1c2n6FI_pv_+0x28(2001, 0, 0, 15d74, fee8cd10, 0)
libCstd.so.1`__1cDstdNbasic_filebuf4Ccn0ALchar_traits4Cc___Eopen6Mpkcil_p1_+0xc0(ffbfcec8,ab800, 2000, 1b6, ffbfcec8, 0)
libCstd.so.1`__1cDstdObasic_ifstream4Ccn0ALchar_traits4Cc___Eopen6Mpkcil_v_+0x88(ffbfceb8,ab800, 4, 1b6, 78, 89004)
libCstd.so.1`__1cDstdObasic_ifstream4Ccn0ALchar_traits4Cc___2t6Mpkcil_v_+0x9c(ffbfceb8,ab800, 4, 1b6, 320, ffbfcec
libcmLogclnt.so`__1cUDConfiguratorImplCVdoConvertAndConfigure6MrknDstdMbasic_string4Ccn0BLchar_traits4Cc__n0BJallocator4Cc_
...

论坛徽章:
0
4 [报告]
发表于 2016-10-10 22:59 |只看该作者
这种问题,一般就是因为某个地方写越界了,破坏了malloc内部的链表,等到以后某次malloc或者free访问到相关内存,就挂了,

这种问题的确难调试,要么就是去review一下各种可能越界的地方,要么用valgrind等工具去抓住越界的地方

评分

参与人数 1信誉积分 +10 收起 理由
lxyscls + 10 赞一个!

查看全部评分

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2016-10-11 10:22 |只看该作者
踩内存,不要怀疑libc,即便有bug,也是因为用的有问题造成的

论坛徽章:
0
6 [报告]
发表于 2016-10-11 12:33 |只看该作者
关键是问题还不能重现。。半年发生了2,3次。。。另外valgrind似乎不支持SPARC solaris
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP