檸檬哥整理了50本計算機相關的電子書,關注公衆號「後端技術學堂」,回覆「1024」便可獲取,回覆「進羣」拉你進讀者技術交流羣。c++
本文首發我的微信公衆號,歡迎圍觀點擊閱讀原文git
最近遇到一個有意思的bug,是關於VSCode編輯器插件的,最近趕項目時間很是緊,說實話在這時日常用的順手的IDE出問題很是影響心情。這就像是你開在高速路上,吃着火鍋唱着歌,忽然輪胎爆了,你說氣不氣人。程序員
不過在找bug和推進修復bug的過程有點意思,經過一系列嘗試最終定位和復現了bug,而且給這個項目的微軟官方倉庫提了issue,最終在最新版本獲得了修復,把這個有趣的過程分享給你們。github
也給你們演示一下如何經過提 issue 的方式參與到開源項目中,固然,參與開源項目的方式有多種,你能夠給項目貢獻源碼,甚至做爲大使幫助推廣項目,找到項目的bug進而提issue也是一種參與方式,總之先參與進來,才能發現開源的樂趣!shell
上週,又是一個在公司的夜晚,好像和日常沒啥區別,檸檬哥在加班ing,飛快的敲打着本身的機械鍵盤,熟練的用 VSCode 瀏覽着項目源碼,順手按下F12+Shift
想看看這個函數在哪些地方被引用了,詭異的事情發生了,這VSCode它居然不聽使喚了,查不出引用的結果了,而且終端提示以下錯誤:json
快速信息操做失敗: FE: 'Compiler exited with error - No IL available' 快速信息操做失敗: FE: 'Compiler exited with error - No IL available'
一開始我覺得是單個工程解析問題,不慌,問題不大。後端
後來換了個工程嘗試,不論我如何的反覆摩擦我潔白的鍵盤帽,始終不能出來查找引用的結果界面,這時才發現,粗大事了。工欲善其事必先利其器,雖然進度有點趕,仍是停下來康康是誰在搗鬼?微信
老讀者應該知道個人開發環境都是遠程開發環境,以前我寫過幾篇介紹如何用VSCode搭建遠程開發,以及配置開發環境的文章,能夠說是VSCode重度愛好者,感興趣我是怎麼遠程開發的能夠了解下歷史文章:網絡
文章1編輯器
繼續前面說的,若是不能查找引用的話,那會對編碼和閱讀源碼帶來很大的不便,這個功能算的上是IDE的基礎功能了,若是連這功能都廢了,那我要你這VSCode有何用?若是不能修復的話我估計要跑拋棄它,用回 Visual Studio 或 CLion。
可是VSCode遠程開發是真的香,而且已經習慣了VSCode操做,在放棄以前還想掙扎下,看還能不能搶救?不過若是實在不行,也沒時間死磕,項目還要繼續,大不了換個 IDE 繼續玩,甚至都想好了以面不再說VSCode香了。
雖然這個插件不是我寫的,但我按照通常程序員排查bug的思路,經過下面幾個步驟一步步來找到問題緣由,最終並推進官方的版本更新來修復,一塊兒來看看吧。
首先,來看看是否是VSCode版本升級致使的問題。按下面的操做,我檢查 VSCode 的版本信息。
仔細覈對版本號和官網的區別,對比問題出現的時間先後都沒有升級過新版本。
OK,應該不是 VSCode 版本升級致使的問題。
既然不是 VSCode 升級版本致使的問題,那就奇了怪了,白天還好好的晚上忽然咋就不行了呢?難道這插件也不想加班了?我陷入了沉思,不過立刻靈機一動,會不會當心改了C++環境配置文件出了問題?
這裏有個知識點記下,要考。VSCode中有一個叫c_cpp_properties.json
的配置文件,這個文件主要用於配置C/C++工程的基礎信息,好比:預約義宏、指定編譯器路徑、預約義頭文件搜索路徑等。
{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/lemon/handsome/thirdparty/**", "/lemon/smart/inc/**" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++14", "intelliSenseMode": "gcc-x64" } ], "version": 4 }
機智如我,確定是這個工程的include
搜索路徑配置的有問題,才致使查找引用失敗了,趕忙去檢查一眼配置文件,因而熟練的敲下Ctrl+Shift+P
查找全部命令和配置(敲黑板!這個命令很經常使用,背下來),輸入關鍵字c++ Edit
果真匹配到了配置文件,打開就是上面的配置文件。
可是看起來文件路徑好像是對的,無論了,死馬當活馬醫,先所有刪除從新配置一遍看看效果,一頓操做以後興奮的檢查有沒有用,然並卵,仍是那個該死的提示 FE: 'Compiler exited with error - No IL available'
,心態有點崩。
發現這個問題確實有點詭異,走到這一步,我幾乎能夠判定是Linux開發環境出了問題,可是不肯定是個人機器環境問題仍是 Linux下 VSCode 自己問題,那怎麼辦呢?先來證實是Linux下才出的問題吧!
我就嘗試不開遠程開發模式,把遠程Linux機器上的工程直接拉到宿主機本地文件夾,而後用VSCode打開宿主機上的本地工程,它居然工做的很好,徹底沒有出現什麼錯誤提示,到這,已經徹底能夠肯定這個bug只在Linux環境下出現了。
夜已深,起來喝杯水,看了下時間,加班班車快到末班了。
事已至此,看來真的要關掉遠程開發,在本地從新配置全部工程了,表面上仍是勸本身再找找緣由,沒事,問題不大。
喝完水,我坐下來繼續想,會不會是C++擴展出了問題呢?你們都知道VSCode只能說是一個編輯器,可以讓他變身C++ IDE徹底是有背後的C++插件或者叫擴展的支持。
就是下面黑黑的這貨,它是VSCode可以支持C++開發背後的男人,衆所周知VSCode是微軟親兒子,看看這個插件做者Microsoft
看來也是微軟自家人開發的插件,發佈以前確定是通過嚴格測試的,問題不大。
不過如今誰也不能相信,即便是微軟自家的插件也不能信任了,僞裝冷靜分析一波。
通過嚴謹的思考(然而並無),最終決定拿出程序員必殺技:重啓試試,卸載重裝。
點擊卸載,卸載完成,點擊安裝,重裝完成,重啓加載,一鼓作氣。
興奮的搓小手手,準備再次見證奇蹟,WTF,問題依舊沒能解決,實話告訴你們,作到這個份上,檸檬哥能夠說是已經很是的絕望了。
無論了先回去睡一覺,夢裏啥都有,沒準次日白天又有了新思路。
果真次日我又有了新想法,雖然卸載重裝插件沒用,但咱們程序員還有最後一招:回退版本!
是時候表演真正的技術了,資深程序員確定懂的,常在河邊站哪有不溼鞋,版本發佈出問題,趕忙回退保命是常規操做。
那咱們就有理由懷疑:微軟在發佈這個插件最新版本的的時候把一個重要特性搞掉了。可是這東西發都發出去了,也不是服務端後臺服務說回退就能回退的,這個插件若是真是bug也只能等下一個版本修復,仍是咱們本身來操做回退吧。
找到插件,按下面方法來執行回退操做:
檸檬當時回退的時候尚未出最新的修復版本,裝的是有問題的1.0.0版本的插件,看這個版本號應該是個較大改動的大版本,出問題也正常。
關鍵是能夠看到這個版本的發佈時間點恰好是我發現bug的時間,這回感受離真相愈來愈近了,至少在時間上是吻合的有底氣了點,那有理由懷疑是這個插件出了問題,回退到上一個穩定版本0.29.0
此次奇蹟真的出現了,「查找引用功能」它回來了!並且也沒有出現FE: 'Compiler exited with error - No IL available'
的報錯提示,爲了進一步確認本身的判斷,我又把插件升級到1.0.0版本(穩了),果真又出現了剛纔的問題。
至此,這個bug算是定位成功,而且可復現驗證,暫時的解決方法是回退到上一個穩定版本。
另外提醒一下,公司其餘同窗也遇到這個問題,我在幫其餘同窗解決這個問題的時候,發現有些人直接升級可能會有網絡問題,致使在線升級不了,報錯:
這時候能夠去上面我發的官網下載離線版本插件安裝包,下完以後,按照下面的操做升級便可,效果和在線升級同樣。
注意了,因爲一些衆所周知的緣由,若是你打不開官網或者下載速度很慢,能夠加文末我我的微信,備註「下載插件」我發給你已經下載好的插件。
這就完了嗎?固然不是。費了我這麼大功夫找出來的bug,不要再浪費其餘人時間了,因此我決定去微軟這個插件的官方倉庫去給他們提 issue
,這裏給不瞭解 Github 開源項目的同窗科普下什麼是 issue
? 上課了,看黑板!
Github項目的 issue 用於團隊協做管理,能夠把將要實現的 feature 或者要修復的 bug 經過提 issue的形式記錄下來,因此咱們若是發現開源項目的bug,能夠經過給開源項目提issue的形式報告這個bug,提醒項目團隊修復跟進。
這裏給出微軟官方C/C++ 插件的github倉庫地址:https://github.com/microsoft/vscode-cpptools
我去寫下了下面這個issue ,雖然是英文描述的,你們應該都能看得懂我就不逐字翻譯了,計算機相關的英文來回就那麼幾個單詞,看多了就會寫,大意就是描述了我遇到的bug和問題出現時的環境配置信息,方便他們定位和復現問題。
issue 標題: C/C++ Extension 1.0.0 some feature Not working When using in Remote-SSH remote development #6176
而且詳細描述了我遇到的問題,其實通過上面一頓操做,檸檬確定是他們這個版本有問題,但還要友好溝通推動問題儘快解決纔是目的,寫代碼的何苦爲難寫代碼的,沒有直接說他們有問題,而是委婉的問了下 I wonder if there is a problem with this latest Extension ?
哈哈
我提issue的時候是中午吃飯的時候12點左右,那時美國那邊應該仍是凌晨,我想確定沒這麼快有回覆了,國外程序員小哥都還在睡覺呢,怎麼也得早上上班才能看到以後回覆,可是萬萬沒想到在下午5點左右就收到了回覆,果真神速。
不過,等等,好像哪裏有點不對勁,注意上面圖中具體時間已經沒顯示了,只是顯示一個 2 days ago
,在我看到消息通知的時候有點詫異處理這麼神速,好奇去翻開處理issue老哥的 github 主頁介紹。
回覆的這位是微軟VS Code C++ Extension
的軟件開發工程師,而後定位是美國的Redmod, WA
,特地去查了當時的美國時間是05:03
,這位老哥是在凌晨5點鐘處理的這個bug。。。這也太優秀了吧,果真大佬們都是半夜寫代碼不用睡覺的,看到凌晨五點的太陽我信了。
到了這裏,這個bug從出如今個人機子上,到定位查找,最終修復算是完美的解決。這裏附上官方的版本連接:https://github.com/microsoft/vscode-cpptools/releases ,裏面有提到本次修復的bug。
按照最新的1.0.0 版本發佈說明,若是你使用 Linux/MAC 版本的VSCode 或者像我這樣用遠程開發的方式從宿主機使用Linux版本,可能會遇到我文中說的bug,我是在0.29.0自動升級到1.0.0發現的bug,因而給1.0.0版本報了個issue,微軟官方在1.0.1版本修復了上述的bug,一張圖看清時間線。
檸檬在這裏建議:正在使用0.29.0版本插件的同窗不升也沒啥大問題,但若是你用的是1.0.0版本,那就要注意了,這個版本在本文描述的場景下是有問題的,仍是及時升級到最新版本爲好。
若是文章對你有幫助,答應我不要白piao好嗎?「點贊、評論、轉發」激勵我持續創做。
能夠微信搜索公衆號「 後端技術學堂 」回覆「1024」獲取50本計算機電子書,回覆「進羣」拉你進讀者技術交流羣,文章每週持續更新,咱們下期見!