昨天我碰到一個(gè)非常坑的問題,問題是這樣的:
我機(jī)子上已經(jīng)裝了vs2015和vs2010米奸,vs2010和vs2015都跑得很溜,沒有啥異乘瘢現(xiàn)象悴晰。然后昨天我不知哪里來的突然想法:機(jī)子上有些資源需要打包收藏,便于后面自己使用逐工。于是乎我就安裝了vs2008膨疏,分別是以下幾個(gè)文件
安裝順序如圖上所標(biāo)。安裝過程中倒是自己做了一些偷工減料:就是我打開著vs2010正在寫代碼钻弄,同時(shí)在安裝vs2008佃却,這時(shí)候在安裝過程中就會(huì)提示我vs需要關(guān)閉,此時(shí)我再去選擇關(guān)閉窘俺,但是一旦提示過后我又偷偷打開了vs2010饲帅,咳复凳,因?yàn)榘惭b過程實(shí)在太久了。好灶泵,就這樣安裝了2008育八,之后我就繼續(xù)開始調(diào)試我的代碼了。神奇的一幕就發(fā)生了:
我的vs2010突然之間加載pdb非常慢赦邻。表現(xiàn)是我通過ide界面上的debug按鈕點(diǎn)擊調(diào)試髓棋,程序啟動(dòng),就當(dāng)加載到每個(gè)dll的時(shí)候惶洲,程序就卡住了按声,而且是卡在了加載本地dll。你說嘛恬吕,要是加載windows dll卡住也就算了签则,因?yàn)槲掖_實(shí)配置了windows符號(hào)svr來拉取。但是一會(huì)想也不對(duì)啊铐料,windows所有本地的符號(hào)我都是拉取過的渐裂,之前一直都沒有這個(gè)問題,怎么會(huì)現(xiàn)在突然有這個(gè)問題呢钠惩,更何況是在加載本地的dll的時(shí)候卡住的柒凉,更是想不通啊B恕膝捞!我轉(zhuǎn)念一想,是不是vs此時(shí)怪異抽筋啊举塔,于是乎我想起了幾個(gè)絕招绑警,絕招中的絕招:vs重啟,電腦重啟央渣。但是殘酷的現(xiàn)實(shí)告訴我仍然是無效计盒。算呢,可能是今天電腦怪異芽丹,硬盤說來也跑了很多天了北启,明天再來吧。
第二天我過來拔第,問題仍然依舊咕村。這回真沒有辦法了,得硬著頭皮搞啊蚊俺,要不沒有辦法干活啊懈涛,于是乎我重現(xiàn)了現(xiàn)場(chǎng),拿起我的windbg來進(jìn)行attach跟蹤泳猬,得到如下堆棧
基本上確定是在vsdebug.dll里面執(zhí)行UpdateInfo卡住了批钠,而且是卡在了sta網(wǎng)絡(luò)com調(diào)用宇植,com調(diào)用啊,既激動(dòng)有懊惱埋心,激動(dòng)的是剛好最近在深入com底層了解指郁,懊惱的是還是不知道為什么。好吧拷呆,我已經(jīng)是窮途末路闲坎,找了同事一起來看看,最終我們根據(jù)匯編定位到是在等待一堆的event事件回來茬斧,但仍然是無果腰懂,因?yàn)橐步鉀Q不了問題。就這樣上午仍然無果
下午了啥供,實(shí)在沒有辦法了悯恍,只能慢慢等吧库糠。不甘心伙狐,于是乎死馬當(dāng)活馬醫(yī),卸載vs2008瞬欧,反正目前來看定位是昨天裝完2008是不是安裝過程不標(biāo)準(zhǔn)贷屎,或者2008在我這個(gè)機(jī)子上有問題導(dǎo)致的,畢竟是裝完后出現(xiàn)的艘虎,但是黃天總是喜歡開歡笑唉侄,仍然卸了又泄,把windows更新都卸載了野建,依然無果属划。算了,算了候生,進(jìn)行第二步定位:
是不是工程有問題同眯,是不是只有vs2010有問題,從這兩步去定位
1唯鸭、我新建一個(gè)簡單工程须蜗,mfc的,試了目溉,跑得很溜啊明肮,尼瑪,難道是我的工程自己出的問題缭付。好吧柿估,突然想起之前邪惡的ncb和suo文件,于是乎把他們刪除了陷猫,問題依舊秫舌。是不是我的工程太舊太古老了只厘,生成了一堆垃圾后工程被損壞了問題,于是我重新編譯了另一個(gè)工程舅巷,尼瑪羔味,仍然問題依舊。沒轍钠右,沒有辦法懷疑工程吧
2赋元、使用2015來編譯試試,此時(shí)一個(gè)轉(zhuǎn)機(jī)出現(xiàn)
此時(shí)的我瞬間恍然大悟飒房,尼瑪搁凸,
1.原來他任何時(shí)候都在從windows服務(wù)器加載
2、windows符號(hào)本地有了還仍然去svr查找
3. 微軟服務(wù)器符號(hào)加載如此之慢狠毯,竟然有時(shí)快有時(shí)慢;ぬ恰!嚼松!
好吧嫡良,坑了我一天的惡心bug,只要去除掉全局變量中的
即可
從這里我得出了兩個(gè)教訓(xùn):
1献酗、以后別再相信_(tái)NT_SYMBOL_PATH這個(gè)符號(hào)的可靠性了寝受,微軟符號(hào)服務(wù)器有時(shí)好有時(shí)壞這個(gè)才是最大的坑(事實(shí)證明不是這個(gè)問題,我得出了錯(cuò)誤的結(jié)論)
2罕偎、一定要隨手準(zhǔn)備一個(gè)網(wǎng)絡(luò)監(jiān)聽工具包很澄,隨時(shí)觀測(cè)來自網(wǎng)絡(luò)的坑爹等待
補(bǔ)注:后和同事溝通,是symsrv.dll有些版本有bug颜及,目前得知的情況是只有6.2這個(gè)版本才是好的甩苛,其他版本有bug
導(dǎo)致了這個(gè)問題有些情況下會(huì)出現(xiàn)有些情況下不會(huì)出現(xiàn),
我出問題的版本是
vs2015隨身帶的版本
vs2010隨身帶的版本