亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4936 | 回復: 10
打印 上一主題 下一主題

[C++] gdb可以,直接執(zhí)行就錯誤,該怎么做 [復制鏈接]

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-01-09 17:06 |只看該作者 |倒序瀏覽
本帖最后由 zhangruichao88 于 2015-01-09 17:50 編輯

有一個線程池的程序,用gdb執(zhí)行的時候是正確的,但直接執(zhí)行會出錯,如果使用gdb附著進程繼續(xù)執(zhí)行,也是正確的,我該怎么解決啊,請各位大神出山


/**********************************************************
*        函數(shù)        :        myFunc                                                                       *
*        功能        :        數(shù)據(jù)處理                                              *
*        輸入        :                                                                                          *
*        輸出        :                                                                                          *
*        返回        :                                                                                          *
*        說明        :                                                                                  *
***********************************************************/

void myFunc(void * const arg)
{
        printf("myFunc arg = %p\n", arg);
        //if(arg == NULL)
        //        return;
        bool RevComplete = false;        //數(shù)據(jù)接收完成的標識
        struct timespec time_out;
        memset(&time_out, 0, sizeof(time_out));
        time_out.tv_sec = time(0);// + 60;        //60s
        time_out.tv_nsec = IDLE_SCAN_PERIOD * 10 * 1000 * 1000;  //100ms
       
    pthread_mutex_lock(&m_Mutex);

        //AppMend *AppModule = (AppMend *)malloc(sizeof(AppMend));
        //memcpy(AppModule, (AppMend*)arg, sizeof(AppMend));
        AppMend *AppModule = (AppMend *)arg;

        /*if(arg != NULL)
        {
                free(arg);       
                arg = NULL;
        }*/
       
    pthread_mutex_unlock(&m_Mutex);

        u_int FlowID = AppModule->GetFlowId();       
        pthread_mutex_lock(&m_pthreadMap);
        if(flow2pid.find(FlowID) == flow2pid.end())
        {
                flow2pid.insert(map<u_int, pthread_t>::value_type(FlowID, pthread_self()));
        }       
        pthread_mutex_unlock(&m_pthreadMap);

        //std::cout << "CreateTask FlowID = " << FlowID << ", flow2pid[FlowID] = "
        //        << flow2pid[FlowID] << ", pid = " << pthread_self() << std::endl;       

        //等待信號
        while(1)
        {       
                printf("arg = %p\n", arg);
                int rc = 0;                       
                siginfo_t myinfo;
               
                //組包并排序
                if(!RevComplete)
                {
                        AppModule->DataSort(false);
                }
                else
                {
                        AppModule->DataSort(true);
                        break;
                }
                               
                sigset_t oldmask;                       
                /*
                if(sigprocmask(SIG_BLOCK, &set, &oldmask) < 0)                          
                {                                 
                        fprintf(stderr, "SIG_BLOCK error/n";
                        continue;
                }
                */
               
                rc = sigtimedwait(&set, &myinfo, &time_out);
                if(rc == -1)
                {
                        printf("sorry thread time out !\n";
                        //std::cout << "sorry thread[" << pthread_self() << "] time out !" << std::endl;
                        RevComplete = true;        //超時發(fā)送數(shù)據(jù)接收的標識
                        continue;
                }

                //if(AppModule == NULL)
                //        AppModule = (AppMend *)malloc(sizeof(AppMend));
               
                if(AppModule != NULL)
                {
                        memset(AppModule, 0, sizeof(AppMend));
                        if(!pthread_recv(AppModule))
                        {
                                cout << "Share Memory error !\n";                               
                                RevComplete = true; //共享內存為空發(fā)送數(shù)據(jù)接收的標識
                                continue;
                        }                       
                }
               
                //std::cout << "pthread_recv FlowID = " << AppModule->GetFlowId() << ", flow2pid[FlowID] = "
                //        << flow2pid[AppModule->GetFlowId()] << ", pid = " << pthread_self() << std::endl;

        }
        if(AppModule != NULL)
        {
                free(AppModule);
                //AppModule = NULL;                       
        }

        pthread_mutex_lock(&m_pthreadMap);
        //解除相應map
        for(map<u_int, pthread_t>::iterator iter1 = flow2pid.begin(); iter1 != flow2pid.end()
        {
                if(iter1->first == FlowID)
                {
                        //std::cout << "free FlowID = " << FlowID << ", flow2pid[FlowID] = " << flow2pid[FlowID] << std::endl;
                        flow2pid.erase(iter1++);
                }
                else
                        ++iter1;
        }
        pthread_mutex_unlock(&m_pthreadMap);
}

在打印while循環(huán)下的arg時,會提示printf出錯,如果刪除該行,則會提示User defined signal 1 后程序終止

論壇徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辭舊歲徽章
日期:2015-03-03 16:54:152015年亞洲杯之約旦
日期:2015-02-11 14:38:37雙魚座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29雙子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亞洲杯之科威特
日期:2015-04-17 16:51:51
2 [報告]
發(fā)表于 2015-01-09 17:24 |只看該作者
通常是內存類錯誤,打日志吧。

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
3 [報告]
發(fā)表于 2015-01-09 17:30 |只看該作者
具體什么錯?有可能是執(zhí)行時序不一樣導致不同的結果

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
4 [報告]
發(fā)表于 2015-01-09 17:30 |只看該作者
具體什么錯?有可能是執(zhí)行時序不一樣導致不同的結果

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
5 [報告]
發(fā)表于 2015-01-09 17:39 |只看該作者
確實應該是內存錯誤,當我打印地址的時候,會崩潰,printf崩潰。
回復 2# zhaohongjian000


   

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
6 [報告]
發(fā)表于 2015-01-09 17:40 |只看該作者
現(xiàn)在只知道內存改變了,但怎么引起的并不知道啊。
hellioncu 發(fā)表于 2015-01-09 17:30
具體什么錯?有可能是執(zhí)行時序不一樣導致不同的結果

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
7 [報告]
發(fā)表于 2015-01-09 17:44 |只看該作者
把代碼貼出一部分吧,請大神幫忙看看
回復 4# hellioncu


   

論壇徽章:
0
8 [報告]
發(fā)表于 2015-01-20 17:32 |只看該作者
可能和同步有關,打日志&靜態(tài)分析吧。

論壇徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16賽季CBA聯(lián)賽之江蘇
日期:2017-11-27 11:42:3515-16賽季CBA聯(lián)賽之八一
日期:2017-04-12 14:26:2815-16賽季CBA聯(lián)賽之吉林
日期:2016-08-20 10:43:1215-16賽季CBA聯(lián)賽之廣夏
日期:2016-06-23 09:53:58程序設計版塊每日發(fā)帖之星
日期:2016-02-11 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-02-09 06:20:0015-16賽季CBA聯(lián)賽之上海
日期:2015-12-25 16:40:3515-16賽季CBA聯(lián)賽之廣夏
日期:2015-12-22 09:39:36程序設計版塊每日發(fā)帖之星
日期:2015-08-24 06:20:002015亞冠之德黑蘭石油
日期:2015-08-07 09:57:302015年辭舊歲徽章
日期:2015-03-03 16:54:15
9 [報告]
發(fā)表于 2015-01-21 10:19 |只看該作者
讓它吐核吧,再在gdb里面看

論壇徽章:
7
天蝎座
日期:2013-09-28 10:45:42雙子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32處女座
日期:2014-09-17 16:44:332015年亞洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16賽季CBA聯(lián)賽之山東
日期:2018-03-02 23:59:31
10 [報告]
發(fā)表于 2015-01-21 14:25 |只看該作者
俺寫過一個多線程的server,有十分十分十分十分小的概率出現(xiàn)死鎖問題,只出現(xiàn)過一次,被我發(fā)現(xiàn)了,于是一直銘記在心,肯定有bug。
在然后,無論怎么執(zhí)行都在沒有發(fā)現(xiàn)死鎖,但,不能這樣將bug放過。

于是,gdb,發(fā)現(xiàn),有非常大的概率發(fā)現(xiàn)死鎖問題。后來我hold住所有線程(忘記是什么gdb命令了),然后一步一步的step當前線程,一個一個線程的試驗,發(fā)現(xiàn)某個線程先執(zhí)行,必然導致死鎖,因此結論是:
gdb干預了操作系統(tǒng)對線程的調度。

因此,樓主的問題,只能去gdb慢慢看代碼了,看看是不是某個線程先執(zhí)行,必然導致錯誤。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP