免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4018 | 回复: 11

达人, 救命!!!无缘无故的崩溃 [复制链接]

论坛徽章:
0
发表于 2009-10-14 17:23 |显示全部楼层
5可用积分
无缘无故的崩溃

(gdb) bt
#0  0x007bd9fb in sem_wait@GLIBC_2.0 () from /lib/tls/libpthread.so.0
#1  0x08052648 in DownDataPool::getData (this=0x0) at DownDataPool.h:44

#2  0x08050596 in CWASZBClientServer::deliver (this=0xb555900 at WASZBClientServer.cpp:322
#3  0x08055fe9 in WASClientServer:eliverData (pvthis=0xb555900 at ../was/WASClientServer.cpp:57
#4  0x007b93ae in start_thread () from /lib/tls/libpthread.so.0
#5  0x00649aee in clone () from /lib/tls/libc.so.6
(gdb) f 2
#2  0x08050596 in CWASZBClientServer::deliver (this=0xb555900 at WASZBClientServer.cpp:322
322         WASDownData dn_data = _downdatapool.getData();
(gdb) p this->_downdatapool
$1 = (DownDataPool & @0x8a261b8: {_sem_datapool = {__sem_lock = {__status = 0,
      __spinlock = 6985784}, __sem_value = -1, __sem_waiting = 0x0}, _lock = {__m_reserved = 0,
    __m_count = 0, __m_owner = 0x0, __m_kind = 0, __m_lock = {__status = 0, __spinlock = 0}},
  _datapool = {<std::_List_base<WASDownData,std::allocator<WASDownData> >> = {
      _M_impl = {<std::allocator<std::_List_node<WASDownData> >> = {<__gnu_cxx::new_allocator<std::_List_node<WASDownData> >> = {<No data fields>}, <No data fields>}, _M_node = {_M_next = 0x8a261e0,
          _M_prev = 0x8a261e0}}}, <No data fields>}}
(gdb) f 1
#1  0x08052648 in DownDataPool::getData (this=0x0) at DownDataPool.h:44
44                      while( 0 != sem_wait(&_sem_datapool) )
(gdb) p this
$2 = (DownDataPool * const) 0x0
(gdb)

实在不理解这是什么原因造成的,在f 2中p this->_downdatapool是正常的,但是进入f 1后 p this就是空了,这是什么原因造成的?请高手指点


刚才整理了一下,发现崩溃的地方改变了,而且同一地址打印的内容却不一样(最下两行红字),这是为哈?百思不得其解
(gdb) p cdp
$6 = (CacheDataPool *) 0x9be1180
(gdb) p cserver->_cachedatapool
$7 = (CacheDataPool *) 0x9be1180
(gdb) p cserver->_cachedatapool->_cache
$8 = {_M_t = {
    _M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, WASDownData> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, WASDownData> > >> = {<No data fields>}, <No data fields>},
      _M_key_compare = {<std::binary_function<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,bool>> = {<No data fields>}, <No data fields>}, _M_header = {
        _M_color = std::_S_red, _M_parent = 0x0, _M_left = 0x9c000000, _M_right = 0x9c09be11}, _M_node_count = 638481}}}
(gdb) p cdp->_cache
$9 = {_M_t = {
    _M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, WASDownData> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, WASDownData> > >> = {<No data fields>}, <No data fields>},
      _M_key_compare = {<std::binary_function<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,bool>> = {<No data fields>}, <No data fields>}, _M_header = {
       _M_color = std::_S_red, _M_parent = 0x0, _M_left = 0x9be119c, _M_right = 0x9be119c}, _M_node_count = 0}}}
(gdb)

[ 本帖最后由 rain_fish 于 2009-10-14 21:56 编辑 ]

论坛徽章:
0
发表于 2009-10-14 17:38 |显示全部楼层

回复 #1 rain_fish 的帖子

朋友们给点思路也可以,急。。。

论坛徽章:
0
发表于 2009-10-14 17:43 |显示全部楼层
你没点代码估计没人能猜到问题

论坛徽章:
0
发表于 2009-10-14 17:52 |显示全部楼层
代码太多,一句两句讲不清楚, 我的意思是造成这个崩溃的原因一般是什么?

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2009-10-14 20:08 |显示全部楼层
不要F 1,一步一步next调试或者printf打印出来,最后看看返回值正不正确

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2009-10-14 20:11 |显示全部楼层
另外,崩溃的时候会产生core文件,你可以gdb这个core文件,看看是哪个函数和哪句代码发生了崩溃,接着可以从该代码往前检查

论坛徽章:
0
发表于 2009-10-14 20:51 |显示全部楼层
原帖由 chenzhanyiczy 于 2009-10-14 20:11 发表
另外,崩溃的时候会产生core文件,你可以gdb这个core文件,看看是哪个函数和哪句代码发生了崩溃,接着可以从该代码往前检查


帖子里的就是core文件,崩溃的地方就在上面,崩溃原因是:getData (this=0x0) ,但是不知道造成这个的原因是什么因为在 f 2
时p this->_downdatapool是有值的,但是到调用getData后,this竟然是空,实在费解。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2009-10-14 20:55 |显示全部楼层
一步一步运行,不要finish 2

论坛徽章:
0
发表于 2009-10-14 21:49 |显示全部楼层

回复 #1 rain_fish 的帖子

继续寻找,发现应该是内存溢出或者越界造成的,大家看一下,同一个内存打印出的结果竟然不同:
(gdb) p cdp
$6 = (CacheDataPool *) 0x9be1180
(gdb) p cserver->_cachedatapool
$7 = (CacheDataPool *) 0x9be1180
(gdb) p cserver->_cachedatapool->_cache
$8 = {_M_t = {
    _M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, WASDownData> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, WASDownData> > >> = {<No data fields>}, <No data fields>},
      _M_key_compare = {<std::binary_function<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,bool>> = {<No data fields>}, <No data fields>}, _M_header = {
        _M_color = std::_S_red, _M_parent = 0x0, _M_left = 0x9c000000, _M_right = 0x9c09be11}, _M_node_count = 638481}}}
(gdb) p cdp->_cache
$9 = {_M_t = {
    _M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, WASDownData> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, WASDownData> > >> = {<No data fields>}, <No data fields>},
      _M_key_compare = {<std::binary_function<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,bool>> = {<No data fields>}, <No data fields>}, _M_header = {
        _M_color = std::_S_red, _M_parent = 0x0, _M_left = 0x9be119c, _M_right = 0x9be119c}, _M_node_count = 0}}}
(gdb)

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2009-10-14 22:12 |显示全部楼层
这样的东西基本上没人看得懂的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP