免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1308 | 回复: 0

[应用] 求助程序的bug [复制链接]

论坛徽章:
0
发表于 2013-06-28 15:41 |显示全部楼层
小弟在修改一个soclib上用systemc写的NoC平台,主要功能是发送数据以及统计一些信息,例如延迟等。因为需要要修改以下数据的发送模式。整个工程的其他部分都没有修改只修改的以下程序。整个程序有个可以设置发送数据包数目的变量。修改过以后,编译通过但是在运行simulation.x执行文件时,对于有些个数的数据包程序可以统计出信息,但是有些个数就会报错。比如当数据包数目是500时可以运行,但是会报段错误。有些数目的数据包运行后,程序报错。不知道我修改的部分有没有语法错误,或者其他bug。请大神指导。

    if ( ! p_resetn.read() ) {
      
         if(TagFlow==true)
         {
          SendCycle=SendCycleArray1;
          IntervalCycle=IntervalCycleArray1;   

         }
         else
         {
          SendCycle=SendCycleArray2;
          IntervalCycle=IntervalCycleArray2;
         }
         r_initiator_fsm = INITIATOR_IDLE;
         send_counter=1;
         interval_counter=0;
        return;
    }


if   ((send_counter==SendCycle)&&(interval_counter==IntervalCycle))  send_counter=1;//一个新周期的开始
else  if   ((send_counter==SendCycle)&&(interval_counter<IntervalCycle))   send_counter=SendCycle;
else         send_counter=send_counter+1;

if (interval_counter==IntervalCycle) interval_counter=0;
else if ((interval_counter<IntervalCycle)&&(send_counter<SendCycle)) interval_counter=0;
else   interval_counter=interval_counter+1;

    switch (r_initiator_fsm.read()) {

    case     
        INITIATOR_IDLE:
         if(send_packet==true)
          {
             if(packet_counter<=PACKET_NUM)
              {
                       if(interval_counter==0)
                       
                         {
                  
                                r_initiator_fsm = INITIATOR_HEADER_WRITE;
                             
                          
                         }
                        

              }   
          }
        else
        {
          r_initiator_fsm = INITIATOR_IDLE;
        }
        break;

    case INITIATOR_HEADER_WRITE:
         {
          if(p_vci.cmdack==true)
           {
                    if(interval_counter==0)
                             
                       {
                                r_initiator_fsm = INITIATOR_HEADER_WRITE;
                                packet_counter++;
                          
                       }
                  else
                   {   r_initiator_fsm = INITIATOR_IDLE;  }
     
           }
          else
           r_initiator_fsm =INITIATOR_HEADER_WRITE;
        
         }break;

主要修改部分如上。
运行后出错如下
SystemC: simulation stopped by user.
*** glibc detected *** ./simulation.x: free(): invalid pointer: 0x0a00c558 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb74acee2]
./simulation.x[0x80cda22]
./simulation.x[0x80a8284]
./simulation.x[0x80a4c8d]
./simulation.x[0x8066b6c]
./simulation.x[0x8092b60]
./simulation.x[0x8073630]
./simulation.x[0x809f59e]
./simulation.x[0x809f868]
./simulation.x[0x80a4365]
./simulation.x[0x804aafb]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb74504d3]
./simulation.x[0x804be41]
======= Memory map: ========
08048000-0817d000 r-xp 00000000 08:0b 1058824    /home/klj/program/buffsize/project_newf_li/simulation.x
0817d000-0817e000 r-xp 00134000 08:0b 1058824    /home/klj/program/buffsize/project_newf_li/simulation.x
0817e000-08181000 rwxp 00135000 08:0b 1058824    /home/klj/program/buffsize/project_newf_li/simulation.x
08181000-08183000 rwxp 00000000 00:00 0
09d26000-0a583000 rwxp 00000000 00:00 0          [heap]
b73d2000-b7413000 rwxp 00000000 00:00 0
b7434000-b7437000 rwxp 00000000 00:00 0
b7437000-b75da000 r-xp 00000000 08:0b 288513     /lib/i386-linux-gnu/libc-2.15.so
b75da000-b75dc000 r-xp 001a3000 08:0b 288513     /lib/i386-linux-gnu/libc-2.15.so
b75dc000-b75dd000 rwxp 001a5000 08:0b 288513     /lib/i386-linux-gnu/libc-2.15.so
b75dd000-b75e0000 rwxp 00000000 00:00 0
b75e0000-b75fc000 r-xp 00000000 08:0b 261982     /lib/i386-linux-gnu/libgcc_s.so.1
b75fc000-b75fd000 r-xp 0001b000 08:0b 261982     /lib/i386-linux-gnu/libgcc_s.so.1
b75fd000-b75fe000 rwxp 0001c000 08:0b 261982     /lib/i386-linux-gnu/libgcc_s.so.1
b75fe000-b7628000 r-xp 00000000 08:0b 288528     /lib/i386-linux-gnu/libm-2.15.so
b7628000-b7629000 r-xp 00029000 08:0b 288528     /lib/i386-linux-gnu/libm-2.15.so
b7629000-b762a000 rwxp 0002a000 08:0b 288528     /lib/i386-linux-gnu/libm-2.15.so
b762a000-b762b000 rwxp 00000000 00:00 0
b762b000-b7703000 r-xp 00000000 08:0b 527344     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7703000-b7704000 ---p 000d8000 08:0b 527344     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7704000-b7708000 r-xp 000d8000 08:0b 527344     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7708000-b7709000 rwxp 000dc000 08:0b 527344     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7709000-b7710000 rwxp 00000000 00:00 0
b7710000-b7727000 r-xp 00000000 08:0b 288526     /lib/i386-linux-gnu/libpthread-2.15.so
b7727000-b7728000 r-xp 00016000 08:0b 288526     /lib/i386-linux-gnu/libpthread-2.15.so
b7728000-b7729000 rwxp 00017000 08:0b 288526     /lib/i386-linux-gnu/libpthread-2.15.so
b7729000-b772b000 rwxp 00000000 00:00 0
b773c000-b7741000 rwxp 00000000 00:00 0
b7741000-b7742000 r-xp 00000000 00:00 0          [vdso]
b7742000-b7762000 r-xp 00000000 08:0b 288529     /lib/i386-linux-gnu/ld-2.15.so
b7762000-b7763000 r-xp 0001f000 08:0b 288529     /lib/i386-linux-gnu/ld-2.15.so
b7763000-b7764000 rwxp 00020000 08:0b 288529     /lib/i386-linux-gnu/ld-2.15.so
bfe22000-bfe43000 rwxp 00000000 00:00 0          [stack]
已放弃 (核心已转储)

请大神指导如何查出出错位置。我想用core文件检查,但是不知道具体怎么做,用gdb运行core文件后也没查出具体出错的地方。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP