国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C++多線程調試和測試的注意事項

開發 后端
本文介紹的是關于C++多線程調試和測試的一些注意事項,在我看來多線程一直都是很難理解的知識,希望對你大家有幫助吧!

在一個程序中,這些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。利用線程,用戶可按下一個按鈕,然后程序會立即作出響應,而不是讓用戶等待程序完成了當前任務以后才開始響應。

在上次的帖子聊了C++多線程的跨平臺問題,后來感覺意猶未盡。今天順便說一下開發C++多線程應用程序時,有關調試和測試的一些注意事項。下面這些注意事項主要是針對C++,不過有些對于其它的語言也適用。

一、關于設置斷點和單步執行

很多同學非常依賴于調試器的斷點功能和單步功能。這在單線程情況下倒還好(不過有些單線程但涉及GUI的程序,也會有點麻煩)。至于多線程程序的調試,這兩種手段簡直就是噩夢的開始。多線程造成的主要問題大都和競態條件(Race Condition,詳細解釋看“這里 ”)有關。

而設置斷點或單步跟蹤可能會嚴重干擾 多線程之間的競爭狀態。導致你看到的是一個假象。比如本來有兩個線程并發執行,存在某些不和諧的Bug(由競態引起)。一旦你在某一個線程設置了斷點,該線程在斷點處停住了,只剩下另一個線程在跑。這時候,并發的場景已經完全被破壞了,你通過調試器看到的可能 是一個和諧的場景。

稍微跑一下題。這很類似量子力學的“測不準原理”,觀測者的觀測行為干擾了被測量的客體,導致觀測者看到的是一個干擾后的現象。

二、關于Log輸出

既然斷點和單步不好用。那咋辦捏?一個替代方案是輸出log日志。它可以有效減輕斷點和單步所導致的(針對競態條件的)副作用。

1、傳統Log機制的問題

傳統的log輸出主要是打印到屏幕或者輸出到文件。對于C++而言,標準庫內置的類和函數(比如cout、printf、fputs)可能會有線程安全的問題(和編譯器的具體實現有關)。尤其是標準流類庫(iostream)的八個全局對象,更是要小心慎用。輕則輸出的log文本混雜,重則導致程序崩潰。

鑒于上述原因,應該盡量使用第三方線程庫內置的log機制來搞定log輸出功能。比如ACE內置的ACE_Log_Msg等。

2、Log函數要短小精悍

很多情況下,我們會包裝一個公用的函數來實現log輸出功能。然后在該函數內部調用線程庫的log類/函數。為了不影響線程的競態條件,這個log函數要盡可能簡單輕便:不要涉及太多雜七雜八的瑣事、千萬別進行耗時的操作、盡量不操作一些全局的變量。

3、Log的副作用

不過捏,即使log函數再短小精悍,也還是有可能影響競態條件(畢竟log也有開銷,也要消耗CPU時間)。

萬一競態條件受到log的影響,那就比較棘手了。我以前就碰到過這種情況:加了log,程序沒有問題;去掉log,程序隨機崩潰。這種情況一般有兩種可能:要么是log功能本身有問題,要么是程序的競態條件非常敏感(連log的開銷都會有影響)。

這時候你能依靠的就只有肉眼和人腦了。先把相關的代碼和文檔仔細看上幾遍(***再找其他有經驗的人一起Code Review),然后大家一起開動腦筋使勁琢磨。

三、關于Debug版本和Release版本

C++程序經常有Debug版本和Release版本的區別。有些時候,這也會導致一些多線程的問題。

由于Debug版本包含了一些調試信息、啟用了某些調試機制(比如assert宏)。所以就可能 影響到多線程的競爭狀態。在倒霉的時候,會碰上Debug版本工作正常,Release版本程序隨機崩潰。要避免這種情況,可以考慮下面兩個辦法:

1、放棄使用Debug版本

你可以干脆放棄使用Debug版本。在這種情況下,你需要考慮把諸如assert之類調試相關的宏替換成自己的一套宏,使得在非Debug版本下也可以生效。

2、兩種版本同步測試

使用此方法,程序員平時自測可以使用Debug版本,但是測試人員日常測試的必須是Release版本。具體的操作步驟可以利用每日構建來輔助進行(每日構建的介紹參見“這里 ”)。一定要避免:在平時僅僅搞Debug版本的測試,等到發布前夕再制作Release版本。這種做法是非常危險的!

四、關于測試的機器(硬件)

說一個親身經歷、印象深刻的事情。

當年用ACE開發跨平臺程序的時候,公司內的的開發環境和測試環境都是單CPU的機器。因為當時多核的機器還沒有面世,多CPU的機器又挺貴,公司沒舍得花錢配置。

軟件開發完之后,測試人員經過幾輪回歸測試,也沒發現太大問題。但是拿到客戶的環境中運行,卻經常會隨機性崩潰。因為不能在客戶環境中Debug,自己的環境又死活沒問題,開發組的幾個人只好充分發揮肉眼和人腦的功能(盯著代碼和設計文檔猛想)。經過N長時間,差點把腦袋想破,***才意識到客戶的機器是多CPU的。然后趕緊從其它部門借了一臺多CPU機器,裝上軟件調試,***查出是一個第三方庫有問題。此事過后,我立即想出各種法子,去申請了幾臺多CPU機器給測試人員用。

由于上述的前車之鑒,所以我強烈建議:如果是開發多線程的應用程序,盡量給每一個 編程人員和測試人員都配置多核/多CPU的機器。畢竟現在多核機器已經很普及了,即使多CPU的機器,價格也還湊合。實在沒必要為了省那點小錢而引入開發風險(不光會浪費開發/測試人員的時間,還可能增加實施和維護的成本)。

原文地址:http://blog.csdn.net/program_think/archive/2009/04/10/4061801.aspx

【編輯推薦】

  1. C/C++是程序員必須掌握的語言嗎?
  2. C++和Java 的缺省初始化問題
  3. 淺談怎樣加快C++代碼的編譯速度
  4. C/C++中動態鏈接庫的創建和調用
  5. 使用托管C++粘合C#和C++代碼(一)
責任編輯:于鐵 來源: CSDN博客
相關推薦

2010-01-18 16:12:16

CC++語言

2010-01-14 18:19:40

C++語言

2010-01-25 18:12:28

C++

2011-08-01 12:53:25

iPhone 多線程 線程

2010-01-20 17:58:54

C++靜態成員

2010-02-03 16:42:45

C++變量作用域

2010-01-26 16:54:58

學習C++

2010-01-27 09:12:01

C++語言學習

2010-02-05 15:30:54

C++多線程測試

2011-07-21 15:20:31

iPhone SDK 多線程

2025-04-03 07:33:56

2010-01-26 16:47:47

VC++6.0

2020-05-15 15:38:54

綜合布線5G網絡

2010-06-21 14:39:56

光纖測試

2009-09-01 17:25:33

初學C#編程

2010-07-12 10:03:25

SQL Serverr

2010-01-18 14:25:19

使用C++Builde

2011-05-26 11:22:04

SEO

2009-06-25 14:41:06

JavaBean

2009-06-11 17:52:08

JavaBean
點贊
收藏

51CTO技術棧公眾號

国产亚洲精品中文字幕| 国产精品视频观看| 最近2019年好看中文字幕视频| 日韩免费高清在线| 国产一区日韩一区| 97免费中文视频在线观看| 欧美videossex另类| 久久精品夜色噜噜亚洲a∨| 蜜桃网站成人| 日韩成人精品一区| 欧美多人爱爱视频网站| 在线观看三级视频| 午夜电影一区二区三区| 欧美aⅴ在线观看| 国产亚洲激情| 国产精品第8页| 国产精区一区二区| 亚洲成人在线视频播放| 日韩a在线观看| 亚洲特级片在线| 在线观看污视频| 国产精品美女久久久| 国产日产欧美a一级在线| 国产精品一区二区精品视频观看| 日韩欧美久久久| 超碰在线影院| 精品国产1区2区| 三年片观看免费观看大全视频下载| 91视频一区二区三区| 无颜之月在线看| 狠狠狠色丁香婷婷综合激情 | 国产精品一品二品| 精品国产福利| 亚洲午夜一级| 成人区精品一区二区| 四季av一区二区三区免费观看| 午夜精品美女自拍福到在线| 欧美第一视频| 亚洲视频网站在线观看| 白浆在线视频| 亚洲精品中文字幕av| 超碰在线97国产| 亚洲成人网在线| 午夜不卡影院| 中文字幕精品久久| 亚洲欧洲二区| 久久免费视频在线| 丁香婷婷成人| 国产精品视频久久| 婷婷六月综合| 久久99精品国产99久久| 久久久久久婷| 一级黄色片播放| 99久久婷婷国产综合精品| 成年人视频网站免费观看| 中文字幕乱码日本亚洲一区二区| 黄色成人羞羞视频| 狠狠色香婷婷久久亚洲精品| 在线播放麻豆| 日韩av有码在线| 粉嫩老牛aⅴ一区二区三区| 五月丁香综合缴情六月小说| 久久亚洲捆绑美女| av污在线观看| 精品久久久久久久久久| 欧美精品电影| 亚洲欧美中文字幕在线一区| 成人在线啊v| 国产精品久久久999| 欧美日韩一区自拍| 亚洲一区影院| 国产午夜精品福利| 亚洲男人都懂的网站| 麻豆成人免费电影| 成人精品一区二区三区电影| 成人欧美一区二区三区在线湿哒哒 | 深夜福利视频一区| 欧美黄色一级视频| 日本中文字幕在线视频观看| 男女啪啪999亚洲精品| 久久久久久国产精品美女| 成人在线免费视频观看| 精品亚洲第一| av一区二区三区黑人| 国产免费网址| 欧美日韩亚洲综合在线| 另类专区亚洲| 国产精品成人久久久久| 国产手机视频一区二区| 国产超级av在线| 亚洲国产日韩a在线播放性色| a在线免费观看| 久久国产精品久久国产精品| 综合在线一区| 僵尸世界大战2 在线播放| 亚洲va欧美va人人爽| 国产天堂在线播放视频| 91精品成人久久| 一区二区久久| 免费观看成人在线视频| 777精品伊人久久久久大香线蕉| 欧美色片在线观看| 亚洲自拍小视频| 不卡av免费在线观看| 四虎影视2018在线播放alocalhost| 日韩av资源在线播放| 久久精品国产www456c0m| 亚洲天堂第一区| 日韩欧美亚洲一二三区| 亚洲精品大片| 久久艹中文字幕| 国产精品天干天干在线综合| 免费在线国产视频| 国产欧美久久久久久| 国产99久久久国产精品| 成a人片在线观看www视频| 九九九久久久久久| 喷水一区二区三区| 丝袜视频国产在线播放| 国外成人在线直播| 热久久国产精品| 天堂av电影在线观看| 97精品在线观看| 国产成人综合精品三级| 菠萝菠萝蜜在线视频免费观看| 国产精品av网站| 国产欧美精品一区| 日本精品在线中文字幕| 日韩成人av网站| 欧美亚洲一区二区在线观看| 精品国产一区二区三区四区| 日本精品久久久久中文字幕| 国产亚洲福利一区| 日韩精品国产欧美| 高清福利在线观看| 国产suv精品一区二区| 国产精品天美传媒沈樵| 91丨精品丨国产| a级免费在线观看| 日韩精品视频在线播放| 肉色丝袜一区二区| 免费在线视频欧美| 国产精品一区二区欧美黑人喷潮水| 五月激情综合色| 欧美日韩精品一区二区视频| 又黄又爽毛片免费观看| 欧美高清视频一区二区| 不卡欧美aaaaa| 草莓视频成人appios| 色一情一乱一乱一区91| 亚洲精品国产综合区久久久久久久 | 97在线观看免费观看| 久久99视频精品| 久久久久久久久岛国免费| 色综合天天色| 日韩一级特黄毛片| 亚洲网站视频福利| 国产.精品.日韩.另类.中文.在线.播放| 丁香花在线电影| 先锋影音一区二区三区| 亚洲高清在线观看| 国产一区久久久| 经典三级一区二区| av7777777| 午夜精品久久17c| 一区二区三区欧美在线观看| 日韩久久精品| eeuss影院www在线播放| 久草一区二区| 日韩精品视频免费专区在线播放| 国产91综合网| 日日夜夜精品视频| 国精产品999国精产品官网| 国产精品入口日韩视频大尺度| 岛国av一区二区三区| 一区二区三区福利| 天堂8中文在线最新版在线| 日韩一级特黄毛片| 午夜伦理精品一区| 亚洲福利视频三区| 亚洲综合日本| 国产精品4hu.www| 全部孕妇毛片丰满孕妇孕| 97超碰人人模人人爽人人看| 欧美福利电影网| 国产一区二区h| 视频成人永久免费视频| 中文在线www| 亚洲国产精品123| 欧美日韩国产成人在线| 精品久久久久久亚洲精品| 日韩激情视频在线观看| vam成人资源在线观看| 白虎精品一区| 日本在线免费观看一区| 欧美久久久精品| 欧美丝袜丝交足nylons| 成人激情av网| 91精品国产视频| 成人午夜毛片|