免费注册 查看新帖 |

Chinaunix

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

[C++] gdb获取到的错误,帮忙看下 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-21 11:04 |只看该作者 |倒序浏览
  1. * 1    Thread 0x7ffd8657c740 (LWP 2138) "Xgateway" pthread_once () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S:94
  2. (gdb) thread 1
  3. [Switching to thread 1 (Thread 0x7ffd8657c740 (LWP 2138))]
  4. #0  pthread_once () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S:94
  5. 94              jmp     6b
  6. (gdb) bt
  7. #0  pthread_once () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S:94
  8. #1  0x00007ffd84dd414c in __GI___backtrace (array=array@entry=0x7fff36168e90, size=size@entry=64) at ../sysdeps/x86_64/backtrace.c:103
  9. #2  0x00007ffd84d3fdd4 in __libc_message (do_abort=2, fmt=fmt@entry=0x7ffd84e48928 "*** Error in `%s': %s: 0x%s ***\n")
  10.     at ../sysdeps/unix/sysv/linux/libc_fatal.c:176
  11. #3  0x00007ffd84d48b5c in malloc_printerr (ptr=0x1102530, str=0x7ffd84e4607e "malloc(): memory corruption", action=<optimized out>)
  12.     at malloc.c:4972
  13. #4  _int_malloc (av=0x7ffd85084760 <main_arena>, bytes=56) at malloc.c:3426
  14. #5  0x00007ffd84d4a11c in __GI___libc_malloc (bytes=56) at malloc.c:2869
  15. #6  0x00007ffd86381388 in _dl_map_object_deps (map=map@entry=0x7ffd86580000, preloads=preloads@entry=0x0,
  16.     npreloads=npreloads@entry=0, trace_mode=trace_mode@entry=0, open_mode=open_mode@entry=-2147483648) at dl-deps.c:515
  17. #7  0x00007ffd8638792c in dl_open_worker (a=a@entry=0x7fff36169a28) at dl-open.c:265
  18. #8  0x00007ffd86383314 in _dl_catch_error (objname=objname@entry=0x7fff36169a18, errstring=errstring@entry=0x7fff36169a20,
  19.     mallocedp=mallocedp@entry=0x7fff36169a10, operate=operate@entry=0x7ffd863877b0 <dl_open_worker>, args=args@entry=0x7fff36169a28)
  20.     at dl-error.c:177
  21. #9  0x00007ffd8638725b in _dl_open (file=0x7ffd84e44ea6 "libgcc_s.so.1", mode=-2147483647, caller_dlopen=<optimized out>, nsid=-2,
  22.     argc=1, argv=0x7fff3616aab8, env=0x7fff3616aac8) at dl-open.c:656
  23. #10 0x00007ffd84dfa9b2 in do_dlopen (ptr=ptr@entry=0x7fff36169c30) at dl-libc.c:87
  24. #11 0x00007ffd86383314 in _dl_catch_error (objname=0x7fff36169c10, errstring=0x7fff36169c20, mallocedp=0x7fff36169c00,
  25.     operate=0x7ffd84dfa970 <do_dlopen>, args=0x7fff36169c30) at dl-error.c:177
  26. #12 0x00007ffd84dfaa72 in dlerror_run (args=0x7fff36169c30, operate=0x7ffd84dfa970 <do_dlopen>) at dl-libc.c:46
  27. #13 __GI___libc_dlopen_mode (name=name@entry=0x7ffd84e44ea6 "libgcc_s.so.1", mode=mode@entry=-2147483647) at dl-libc.c:163
  28. #14 0x00007ffd84dd4035 in init () at ../sysdeps/x86_64/backtrace.c:52
  29. #15 0x00007ffd86164be0 in pthread_once () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S:103
  30. #16 0x00007ffd84dd414c in __GI___backtrace (array=array@entry=0x7fff36169ef0, size=size@entry=64) at ../sysdeps/x86_64/backtrace.c:103
  31. #17 0x00007ffd84d3fdd4 in __libc_message (do_abort=2, fmt=fmt@entry=0x7ffd84e48928 "*** Error in `%s': %s: 0x%s ***\n")
  32.     at ../sysdeps/unix/sysv/linux/libc_fatal.c:176
  33. #18 0x00007ffd84d48b5c in malloc_printerr (ptr=0x1102530, str=0x7ffd84e4607e "malloc(): memory corruption", action=<optimized out>)
  34.     at malloc.c:4972
  35. #19 _int_malloc (av=0x7ffd85084760 <main_arena>, bytes=1024) at malloc.c:3426
  36. #20 0x00007ffd84d4a11c in __GI___libc_malloc (bytes=1024) at malloc.c:2869
  37. #21 0x00007ffd85cd1baf in evbuffer_chain_new (size=140726835383584, size@entry=200) at buffer.c:177
  38. #22 0x00007ffd85cd6b60 in evbuffer_expand_fast_ (buf=buf@entry=0x1165a20, datlen=datlen@entry=200, n=n@entry=4) at buffer.c:2044
  39. #23 0x00007ffd85cd7238 in evbuffer_read (buf=buf@entry=0x1165a20, fd=fd@entry=101, howmuch=200, howmuch@entry=16384) at buffer.c:2292
  40. #24 0x00007ffd85cde175 in bufferevent_readcb (fd=101, event=<optimized out>, arg=0x1124ed0) at bufferevent_sock.c:167
  41. #25 0x00007ffd85ce3849 in event_persist_closure (ev=<optimized out>, base=0x106f880) at event.c:1531
  42. ---Type <return> to continue, or q <return> to quit---
  43. #26 event_process_active_single_queue (base=base@entry=0x106f880, activeq=0xf6f470, max_to_process=max_to_process@entry=2147483647,
  44.     endtime=endtime@entry=0x0) at event.c:1590
  45. #27 0x00007ffd85ce40ff in event_process_active (base=0x106f880) at event.c:1689
  46. #28 event_base_loop (base=0x106f880, flags=0) at event.c:1912
  47. #29 0x000000000040f531 in MultiServer::StartRun (this=0x1022880) at gateway/src/MultiServer.cpp:366
  48. #30 0x000000000040c8e1 in TControl::Run (this=this@entry=0x7fff3616a9a0) at gateway/src/TControl.cpp:21
  49. #31 0x00000000004061f0 in main (argc=1, argv=0x7fff3616aab8) at gateway/src/node_gateway.cpp:64
复制代码
这是一个什么错误?

论坛徽章:
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-04-21 11:30 |只看该作者
本帖最后由 VIP_fuck 于 2016-04-21 11:30 编辑

感觉你是 库 用错了,内存分配上除了问题。瞎猜的。

#29 0x000000000040f531 in MultiServer::StartRun (this=0x1022880) at gateway/src/MultiServer.cpp:366
从这里入手说不定是个方法

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2016-04-21 11:35 |只看该作者
本帖最后由 jd808 于 2016-04-21 11:37 编辑

#22 0x00007ffd85cd6b60 in evbuffer_expand_fast_ (buf=buf@entry=0x1165a20, datlen=datlen@entry=200, n=n@entry=4) at buffer.c:2044
2044行是
2044                    chain = evbuffer_chain_new(datlen);
(gdb) p datlen
$8 = 200
(gdb) down 1
#21 0x00007ffd85cd1baf in evbuffer_chain_new (size=140726835383584, size@entry=200) at buffer.c:177
177             if ((chain = mm_malloc(to_alloc)) == NULL)
(gdb) p size
$9 = 140726835383584

怎么会这样?
调用evbuffer_chain_new的时候,参数datlen是正常,一旦进入evbuffer_chain_new内部,他有两个参数size=140726835383584, size@entry=200,一个正确,一个不正确,打印size的时候 值是140726835383584,搞不明白

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2016-04-21 11:38 |只看该作者
VIP_fuck 发表于 2016-04-21 11:30
感觉你是 库 用错了,内存分配上除了问题。瞎猜的。

#29 0x000000000040f531 in MultiServer::StartRun  ...

bool MultiServer::StartRun()
{
    evconnlistener *listener=NULL;
//    evconnlistener *listener1=NULL;

    LISTER_TYPE * a=new LISTER_TYPE;
//    LISTER_TYPE * b=new LISTER_TYPE;
    a->p_ser=this;
    a->port=m_Port;

    printf("======监听端口=====%d==\n",m_Port);
        //timer event process
        m_runTimerFlag = 1;

        //创建一个定时线程,主要功能是汇报本服务器的情况
        pthread_create(&m_timerTid, NULL, WorkerTimerEvent, (void *)m_TimeThreadInfo);

        //开启各个子线程
        for(int i=0; i<m_ThreadCount; i++)
                pthread_create(&m_tid, NULL, WorkerLibevent, (void *)&m_pThreadInfo);

        pthread_create(&m_timerCDTid, NULL, WorkerTimerCDEvent, (void *)m_TimeCDThreadInfo);

        if(Listener(&listener,a)==-1){
                fprintf(stderr, "listen error: %s\n", strerror(errno));
                exit(1);
        }

//        if(g_pConf->OPEN_ROUTING==0){
//                if(Listener(&listener1,b)==-1){
//                                fprintf(stderr, "listen error: %s\n", strerror(errno));
//                                exit(1);
//                }
//        }

    //开启主线程的事件循环
    event_base_dispatch(m_EventBase);

    //事件循环结果,释放监听者的内存
    evconnlistener_free(listener);
//    if(g_pConf->OPEN_ROUTING==0)
//            evconnlistener_free(listener1);

    return true;
}

这是哪行的代码     event_base_dispatch(m_EventBase);,这里看不出来任何问题。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2016-04-21 11:41 |只看该作者
猜测应该是程序在运行过程中,内存越界了,但奇怪的时
#21 0x00007ffd85cd1baf in evbuffer_chain_new (size=140726835383584, size@entry=200) at buffer.c:177
这里为什么有个size是错的,一个是对的(200那个是对的)
内存越界应该会导致这个函数段错误吧,怎么会出这种奇怪的错误?

论坛徽章:
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
6 [报告]
发表于 2016-04-21 11:41 |只看该作者
回复 4# jd808


    这么看我是看不出来123的,只能提供个参考方向,代码还得撸主自己慢慢撸啊。说不定我说的是错的讷。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2016-04-21 11:45 |只看该作者
VIP_fuck 发表于 2016-04-21 11:41
回复 4# jd808
  1. static struct evbuffer_chain *
  2. evbuffer_chain_new(size_t size)
  3. {
  4.         struct evbuffer_chain *chain;
  5.         size_t to_alloc;

  6.         if (size > EVBUFFER_CHAIN_MAX - EVBUFFER_CHAIN_SIZE)
  7.                 return (NULL);

  8.         size += EVBUFFER_CHAIN_SIZE;

  9.         /* get the next largest memory that can hold the buffer */
  10.         if (size < EVBUFFER_CHAIN_MAX / 2) {
  11.                 to_alloc = MIN_BUFFER_SIZE;
  12.                 while (to_alloc < size) {
  13.                         to_alloc <<= 1;
  14.                 }
  15.         } else {
  16.                 to_alloc = size;
  17.         }

  18.         /* we get everything in one chunk */
  19.         if ((chain = mm_malloc(to_alloc)) == NULL)
  20.                 return (NULL);

  21.         memset(chain, 0, EVBUFFER_CHAIN_SIZE);

  22.         chain->buffer_len = to_alloc - EVBUFFER_CHAIN_SIZE;

  23.         /* this way we can manipulate the buffer to different addresses,
  24.          * which is required for mmap for example.
  25.          */
  26.         chain->buffer = EVBUFFER_CHAIN_EXTRA(u_char, chain);

  27.         chain->refcnt = 1;

  28.         return (chain);
  29. }
复制代码
能帮我解释下这个函数么?传进来怎么会有两个参数》?
#21 0x00007ffd85cd1baf in evbuffer_chain_new (size=140726835383584, size@entry=200) at buffer.c:177
size@entry=200这个是对的

论坛徽章:
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
8 [报告]
发表于 2016-04-21 11:49 |只看该作者
回复 7# jd808


    前提是,我不知道这个库怎么用。所以都是猜。

    看起来是编译器插进去的一个值,不过没明白这个值是干啥的。错误不应该出在这里。或者你加打印,一步步的走,逐步缩小错误的范围。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
9 [报告]
发表于 2016-04-21 12:07 |只看该作者
0x00007ffd84d3fdd4 in __libc_message (do_abort=2, fmt=fmt@entry=0x7ffd84e48928 "*** Error in `%s': %s: 0x%s ***\n")

0x%X吧?0x%s错了?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2016-04-21 12:18 |只看该作者
yulihua49 发表于 2016-04-21 12:07
0x00007ffd84d3fdd4 in __libc_message (do_abort=2, fmt=fmt@entry=0x7ffd84e48928 "*** Error in `%s': % ...
这个是libevent里面的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP