免费注册 查看新帖 |

Chinaunix

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

这两天很郁闷,程序测试的时候出现“段错误-核心陷阱” [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-01 16:24 |只看该作者 |倒序浏览
我也知道可能是非法内存访问或者越界,但就是找不出来是哪里出现了问题。达人们给点建议吧。3x

论坛徽章:
0
2 [报告]
发表于 2007-02-01 16:30 |只看该作者
哈哈,没办法啦

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2007-02-01 16:31 |只看该作者
gdb...

论坛徽章:
0
4 [报告]
发表于 2007-02-01 16:47 |只看该作者
我给楼主的建议就是一点点调试
我认为这样找错误效率能高一点
别的好的办法我也不知道

论坛徽章:
0
5 [报告]
发表于 2007-02-01 16:52 |只看该作者
单个执行没有问题,是不是我写的压力测试程序有问题?

论坛徽章:
0
6 [报告]
发表于 2007-02-01 16:53 |只看该作者
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <strings.h>
#define MAXTHREAD 50
void *GetHlrThr1()
{
                char log[10];
                char num[3];
                memset(num,0,3);
                memset(log,0,10);
                sprintf(num,"%d",1);
                strcpy(log,"log");
                strcat(log,num);
                char cmd[100];
                memset(cmd,0,100);
                strcpy(cmd,"./test -222685306 \"HGSDP:MSISDN=8613508247798,ALL;\" ");
                strcat(cmd,log);
                printf("cmd(%s)\r\n",cmd);
                system(cmd);
}
void *GetHlrThr2()
{
                char log[10];
                char num[3];
                memset(num,0,3);
                memset(log,0,10);
                sprintf(num,"%d",2);
                strcpy(log,"log");
                strcat(log,num);
                char cmd[100];
                memset(cmd,0,100);
                strcpy(cmd,"./test 642805463 \"DISPMSUB:SN=80649621,DATAKD=DIAGDATA,NDC=138;\" ");
                strcat(cmd,log);
                printf("cmd(%s)\r\n",cmd);
                system(cmd);
}

void *GetHlrThr3()
{
                char log[10];
                char num[3];
                memset(num,0,3);
                memset(log,0,10);
                sprintf(num,"%d",3);
                strcpy(log,"log");
                strcat(log,num);
                char cmd[100];
                memset(cmd,0,100);
                strcpy(cmd,"./test -160506378 \"LST SUB:ISDN=\\\"8613508299174\\\";\" ");
                strcat(cmd,log);
                printf("cmd(%s)\r\n",cmd);
                system(cmd);
}
void *GetHlrThr4()
{
                char log[10];
                char num[3];
                memset(num,0,3);
                memset(log,0,10);
                sprintf(num,"%d",4);
                strcpy(log,"log");
                strcat(log,num);
                char cmd[100];
                memset(cmd,0,100);
                strcpy(cmd,"./test 642805463 \"DISPMSUB:SN=80765903,DATAKD=DIAGDATA,NDC=138;\" ");
                strcat(cmd,log);
                printf("cmd(%s)\r\n",cmd);
                system(cmd);
}

void *GetHlrThr5()
{
                char log[10];
                char num[3];
                memset(num,0,3);
                memset(log,0,10);
                sprintf(num,"%d",5);
                strcpy(log,"log");
                strcat(log,num);
                char cmd[100];
                memset(cmd,0,100);
                strcpy(cmd,"./test 642805463 \"DISPMSUB:SN=47836448,DATAKD=DIAGDATA,NDC=135;\" ");
                strcat(cmd,log);
                printf("cmd(%s)\r\n",cmd);
                system(cmd);
}

void *GetHlrThr6()
{
                char log[10];
                char num[3];
                memset(num,0,3);
                memset(log,0,10);
                sprintf(num,"%d",6);
                strcpy(log,"log");
                strcat(log,num);
                char cmd[100];
                memset(cmd,0,100);
                strcpy(cmd,"./test 642805463 \"HGSDP:MSISDN=8613698106994,ALL;\" ");
                strcat(cmd,log);
                printf("cmd(%s)\r\n",cmd);
                system(cmd);
}


int main()
{
        /*int i = 0;
        for(;i<10;i++)
        {
                char log[10];
                char num[3];
                memset(num,0,3);
                memset(log,0,10);
                sprintf(num,"%d",i);
                strcpy(log,"log");
                strcat(log,num);
                char cmd[100];
                memset(cmd,0,100);
                strcpy(cmd,"./test -222685306 \"HGSDP:MSISDN=8613508247798,ALL;\" ");
                strcat(cmd,log);
                printf("cmd(%s)\r\n",cmd);
                system(cmd);
        }
        pthread_t thrs[MAXTHREAD];
        int ithrs[MAXTHREAD];
        int i = 0;
        for(;i<MAXTHREAD;i++)
        {
                ithrs[i]= 1;
        }
        i = 0;
        for(;i<MAXTHREAD;i++)
        {
                //int iThread = pthread_create(&thrGetData,NULL,GetData,NULL);
                ithrs[i] = pthread_create(&(thrs[i]),NULL,GetHlrThr,NULL);
                printf("thr%d\r\n",i);
        }
        int k=0;
        while(k>MAXTHREAD)
        {
                i=0;
                for(;i<MAXTHREAD;i++)
                {
                        if(ithrs[i] == 0)
                        {
                                pthread_join(ithrs[i],NULL);
                                k++;
                        }
                }
        }
        return 0;

        */

        pthread_t thr1,thr2,thr3,thr4,thr5,thr6,thr7,thr8,thr9,thr10;
        int i1,i2,i3,i4,i5,i6,i7,i8,i9,i10;
        i1=pthread_create(&thr1,NULL,GetHlrThr1,NULL);
        i2=pthread_create(&thr2,NULL,GetHlrThr2,NULL);
        i3=pthread_create(&thr3,NULL,GetHlrThr3,NULL);
        i4=pthread_create(&thr4,NULL,GetHlrThr4,NULL);
        i5=pthread_create(&thr5,NULL,GetHlrThr5,NULL);
        i6=pthread_create(&thr6,NULL,GetHlrThr6,NULL);
        /*i7=pthread_create(&thr7,NULL,GetHlrThr,NULL);
        i8=pthread_create(&thr8,NULL,GetHlrThr,NULL);
        i9=pthread_create(&thr9,NULL,GetHlrThr,NULL);
        i10=pthread_create(&thr10,NULL,GetHlrThr,NULL);*/
       
        pthread_join(thr1,NULL);
        pthread_join(thr2,NULL);
        pthread_join(thr3,NULL);
        pthread_join(thr4,NULL);
        pthread_join(thr5,NULL);
        pthread_join(thr6,NULL);
        /*pthread_join(thr7,NULL);
        pthread_join(thr8,NULL);
        pthread_join(thr9,NULL);
        pthread_join(thr10,NULL);*/
        printf("成功执行!\r\n");
}

以上是一个简单的多线程调用程序

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
7 [报告]
发表于 2007-02-01 20:34 |只看该作者
打开编译参数-v -da -Q -g -O0
编译代码,如果代码超过2万行,建议睡觉前开始编译早上起来可以收获了。

论坛徽章:
0
8 [报告]
发表于 2007-02-01 23:31 |只看该作者
why not use gdb debug you program??

论坛徽章:
0
9 [报告]
发表于 2007-02-02 10:37 |只看该作者
原帖由 arenxl 于 2007-2-1 16:53 发表
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <strings.h>
#define MAXTHREAD 50
void *GetHlrThr1()
{
                char log[10];
...


这个程序可以运行,没有什么问题

论坛徽章:
0
10 [报告]
发表于 2007-02-02 10:41 |只看该作者
原帖由 arenxl 于 2007-2-1 16:53 发表
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <strings.h>
#define MAXTHREAD 50
void *GetHlrThr1()
{
                char log[10];
...



提醒一下,编译以后的程序名不要用test,否则递归调用,很快就会把资源耗尽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP