發(fā)調(diào)試全攻略)
寫(xiě)這篇教程之前先說(shuō)點(diǎn)實(shí)在話。我第一次在機(jī)器上裝Visual Studio 2019時(shí)被一堆工作負(fù)載、組件、路徑選項(xiàng)搞得很懵裝完又因?yàn)镃盤(pán)空間告急、編譯環(huán)境缺庫(kù)、斷點(diǎn)不生效等問(wèn)題折騰了整整一個(gè)下午。后來(lái)給同學(xué)、同事配環(huán)境配多了才摸清楚這套東西的正確打開(kāi)方式。今天這一篇就盡量把VS2019從下載安裝到日常使用的整個(gè)流程掰開(kāi)揉碎講清楚尤其照顧剛?cè)腴T(mén)的讀者——看完你能自己裝好環(huán)境并且能獨(dú)立跑起第一個(gè)C或C#項(xiàng)目。1. 裝前必讀VS2019的版本選擇與下載版本選不對(duì)后面全是坑。VS2019有Community、Professional、Enterprise三種版本國(guó)內(nèi)教程和課程教材里最常見(jiàn)的是Community版因?yàn)樗鼘?duì)個(gè)人開(kāi)發(fā)者、學(xué)生和開(kāi)源項(xiàng)目完全免費(fèi)。Professional和Enterprise主要面向商業(yè)團(tuán)隊(duì)提供數(shù)據(jù)庫(kù)架構(gòu)比較、高級(jí)測(cè)試工具等額外能力普通學(xué)習(xí)場(chǎng)景根本用不上別花冤枉錢(qián)去網(wǎng)上找什么破解密鑰社區(qū)版就是最穩(wěn)妥的選擇。版本價(jià)格適用場(chǎng)景許可說(shuō)明Community免費(fèi)個(gè)人開(kāi)發(fā)者、學(xué)生、開(kāi)源項(xiàng)目、課堂教學(xué)微軟官方免費(fèi)授權(quán)5人以下小團(tuán)隊(duì)也可用Professional付費(fèi)訂閱中小型商業(yè)開(kāi)發(fā)團(tuán)隊(duì)需購(gòu)買(mǎi)許可證或試用Enterprise付費(fèi)訂閱大型企業(yè)需要高級(jí)測(cè)試/架構(gòu)工具成本高適合規(guī)?;邪l(fā)組織1.1 到底該裝哪個(gè)版本別被“專(zhuān)業(yè)版密鑰”帶偏打開(kāi)搜索引擎一搜“VS2019安裝教程”經(jīng)常能看到“VS2019產(chǎn)品密鑰”“VS2019專(zhuān)業(yè)版密鑰”這樣的熱詞。這其實(shí)是一個(gè)明顯的誤導(dǎo)社區(qū)版圖標(biāo)和功能已經(jīng)覆蓋了95%以上的學(xué)習(xí)與個(gè)人項(xiàng)目需求微軟官方并沒(méi)有為Community版本設(shè)置激活墻安裝登錄后直接就能用。如果確實(shí)在公司商業(yè)環(huán)境需要Professional正確做法是去微軟官網(wǎng)訂閱或者申請(qǐng)?jiān)囉脧姆枪俜角滥玫降拿荑€基本都存在授權(quán)風(fēng)險(xiǎn)完全沒(méi)有必要。我的建議是如果你只是做課程作業(yè)、個(gè)人練手、參加競(jìng)賽或者給開(kāi)源項(xiàng)目貢獻(xiàn)代碼直接下載Community版。判斷標(biāo)準(zhǔn)很簡(jiǎn)單——你不靠這個(gè)IDE直接產(chǎn)生商業(yè)收入Community版就夠用。至于已經(jīng)裝了Professional但沒(méi)激活的同學(xué)進(jìn)入IDE后右上角會(huì)顯示“試用版”到期前記得備份自己的代碼和配置避免項(xiàng)目無(wú)法打開(kāi)。1.2 官方下載渠道與離線安裝包方案VS2019的官方下載地址是微軟Visual Studio官網(wǎng)的舊版本頁(yè)面路徑是 visualstudio.microsoft.com/vs/older-downloads/。注意不要混淆VS2022的下載頁(yè)兩者安裝器不同。進(jìn)入頁(yè)面后在“較早的版本”區(qū)域找到Visual Studio 2019點(diǎn)擊下載會(huì)得到一個(gè)名為vs_community.exe或vs_professional.exe的引導(dǎo)安裝程序體積只有幾MB真正的組件是在安裝過(guò)程中聯(lián)網(wǎng)拉取的。如果你的網(wǎng)絡(luò)環(huán)境不太好或者需要在多臺(tái)機(jī)器上重復(fù)安裝可以提前制作離線安裝包。用命令行模式下載完整的離線布局到本地目錄后續(xù)所有機(jī)器從該目錄安裝即可。核心命令如下vs_community.exe --layout D:\vs2019_offline --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.ManagedDesktop --includeRecommended --lang zh-CN這個(gè)命令會(huì)把C桌面開(kāi)發(fā)、.NET桌面開(kāi)發(fā)以及推薦組件整體緩存到D盤(pán)vs2019_offline文件夾之后執(zhí)行該目錄下的vs_setup.exe就能離線安裝。實(shí)測(cè)下來(lái)完整布局大概5到10GB請(qǐng)確保目標(biāo)盤(pán)有足夠剩余空間。制作時(shí)幾個(gè)參數(shù)的作用分別是--layout指定緩存目錄--add指定安裝的工作負(fù)載--includeRecommended表示順帶緩存推薦組件--lang指定語(yǔ)言包。1.3 安裝包下載后如何校驗(yàn)完整性下載完成后建議先校驗(yàn)文件哈希值避免安裝過(guò)程中出現(xiàn)莫名其妙的損壞。在PowerShell里執(zhí)行Get-FileHash D:\vs2019_offline\vs_setup.exe -Algorithm SHA256將輸出結(jié)果與微軟官方頁(yè)面列出的哈希值比對(duì)。這是一個(gè)容易忽略但很實(shí)用的習(xí)慣尤其當(dāng)你從第三方網(wǎng)盤(pán)下載離線包時(shí)這一步能過(guò)濾掉很多被篡改或被壓縮工具損壞的文件。我之前幫人排查過(guò)一個(gè)安裝失敗問(wèn)題最后定位就是下載的安裝器被殺毒軟件誤殺了一半校驗(yàn)哈希時(shí)立刻發(fā)現(xiàn)了異常。2. 安裝實(shí)操?gòu)碾p擊安裝程序到進(jìn)入IDE雙擊下載好的安裝器界面會(huì)引導(dǎo)你進(jìn)入“Visual Studio Installer”。在這個(gè)階段很多人會(huì)犯一個(gè)錯(cuò)誤——不假思索地勾選全部工作負(fù)載結(jié)果安裝體積突破三四十GB后續(xù)系統(tǒng)盤(pán)直接爆炸。工作負(fù)載其實(shí)就是一組預(yù)打包的組件集合比如“使用C的桌面開(kāi)發(fā)”包含了C編譯器、標(biāo)準(zhǔn)庫(kù)、Windows SDK、調(diào)試器等一系列工具勾選后會(huì)一次性裝齊。2.1 工作負(fù)載怎么選決定了你的開(kāi)發(fā)方向安裝界面打開(kāi)后左側(cè)是“工作負(fù)載”選項(xiàng)卡。這里要根據(jù)你到底寫(xiě)什么代碼來(lái)選寫(xiě)C/C桌面程序勾選“使用C的桌面開(kāi)發(fā)”。寫(xiě)C#/WPF/WinForms或ASP.NET勾選“.NET桌面開(kāi)發(fā)”和“ASP.NET和Web開(kāi)發(fā)”。寫(xiě)Python勾選“Python開(kāi)發(fā)”也可以順便裝Anaconda配合用。寫(xiě)通用Windows平臺(tái)應(yīng)用勾選“通用Windows平臺(tái)開(kāi)發(fā)”。最常用的組合是“使用C的桌面開(kāi)發(fā)”加“.NET桌面開(kāi)發(fā)”加“Python開(kāi)發(fā)”覆蓋了大多數(shù)學(xué)生在校期間會(huì)遇到的課程項(xiàng)目。其他工作負(fù)載先不要勾等真正有需要再打開(kāi)VS Installer添加這樣能省下大量磁盤(pán)空間和安裝時(shí)間。安裝器是獨(dú)立于VS的后面想增刪組件隨時(shí)可以再次運(yùn)行它。安裝位置選項(xiàng)卡里有一個(gè)容易被忽視的坑除了安裝路徑還有“下載緩存”路徑。VS2019默認(rèn)會(huì)把安裝包緩存到C盤(pán)。對(duì)于C盤(pán)容量只有128GB或256GB的機(jī)器我強(qiáng)烈建議把安裝包緩存也改到其他盤(pán)否則裝完VS后再裝幾個(gè)擴(kuò)展C盤(pán)就飄紅了。安裝路徑也不建議放進(jìn)Program Files目錄后續(xù)有時(shí)候權(quán)限問(wèn)題會(huì)讓人煩——直接設(shè)置為D:\Program Files\Microsoft Visual Studio\2019\Community這樣的獨(dú)立目錄更清爽。2.2 安裝過(guò)程中的系統(tǒng)要求與磁盤(pán)空間核查VS2019最低支持Windows 10 64位系統(tǒng)Windows 7 SP1也能裝但官方早已停止對(duì)Win7的支持最好還是用Windows 10或11。內(nèi)存方面建議至少8GB16GB會(huì)更舒服。安裝前先在“設(shè)置-系統(tǒng)-存儲(chǔ)”里看一眼剩余空間我的經(jīng)驗(yàn)是C盤(pán)至少留15GB可用D盤(pán)等其他目標(biāo)盤(pán)至少留30GB因?yàn)閷?shí)際安裝占用比安裝器預(yù)估的往往還要大一些。安裝過(guò)程大概需要10到30分鐘不等取決于網(wǎng)絡(luò)速度和組件數(shù)量。中途不要頻繁暫停或重啟機(jī)器否則可能殘留緩存導(dǎo)致后續(xù)增刪組件異常。安裝時(shí)你的機(jī)器會(huì)反復(fù)要求重啟時(shí)先完成重啟再繼續(xù)不要強(qiáng)制跳過(guò)。2.3 首次啟動(dòng)的初始化設(shè)置與主題配置安裝完成后一般會(huì)自動(dòng)跳出登錄頁(yè)面。登錄微軟賬號(hào)不是強(qiáng)制的但建議登錄——這樣Code的配置、主題、擴(kuò)展列表等會(huì)同步到云端換機(jī)器時(shí)一鍵恢復(fù)。如果你沒(méi)有賬號(hào)選擇“以后再說(shuō)”也能正常使用。進(jìn)入IDE后會(huì)彈出首次啟動(dòng)的“開(kāi)發(fā)設(shè)置”窗口這里有幾個(gè)選項(xiàng)包括“Visual C”“Visual C#”“Web開(kāi)發(fā)”等。選錯(cuò)了沒(méi)關(guān)系因?yàn)楹罄m(xù)可以在“工具-導(dǎo)入和導(dǎo)出設(shè)置”里重置。但“開(kāi)發(fā)設(shè)置”直接關(guān)聯(lián)快捷鍵方案和窗口布局比如選了Visual C默認(rèn)包含F(xiàn)12跳轉(zhuǎn)定義、CtrlKC注釋等C開(kāi)發(fā)者習(xí)慣的快捷鍵組合。根據(jù)你的主要語(yǔ)言選對(duì)應(yīng)的一項(xiàng)即可比如我主打C就選“Visual C”。主題顏色我建議選深色——“工具-選項(xiàng)-環(huán)境-常規(guī)”里的顏色主題改一下長(zhǎng)時(shí)間寫(xiě)代碼對(duì)眼睛更友好。首次彈出的“開(kāi)始窗口”中還有“啟動(dòng)時(shí)打開(kāi)”的相關(guān)選項(xiàng)保持默認(rèn)就行。3. 第一個(gè)項(xiàng)目新建、編寫(xiě)與調(diào)試環(huán)境安裝好了接下來(lái)是真正的開(kāi)發(fā)流程。這一部分我會(huì)用“C控制臺(tái)應(yīng)用”作為例子來(lái)演示因?yàn)榫幾g運(yùn)行最直接適合新手理解IDE的整個(gè)閉環(huán)。如果你學(xué)的是C#操作路徑幾乎一致只是模板名稱(chēng)不同。3.1 創(chuàng)建C控制臺(tái)項(xiàng)目的完整步驟打開(kāi)VS2019在啟動(dòng)頁(yè)點(diǎn)擊“創(chuàng)建新項(xiàng)目”搜索“控制臺(tái)應(yīng)用”選擇“控制臺(tái)應(yīng)用”模板語(yǔ)言選C。注意別選“空項(xiàng)目”——空項(xiàng)目連main函數(shù)框架都沒(méi)有新手容易卡在第一步。項(xiàng)目名稱(chēng)比如DemoProject位置選D盤(pán)自己建的workspace目錄勾選“將解決方案和項(xiàng)目放在同一目錄中”不勾選也沒(méi)關(guān)系這個(gè)因人而異。點(diǎn)“創(chuàng)建”后VS會(huì)生成一個(gè)標(biāo)準(zhǔn)項(xiàng)目結(jié)構(gòu)核心文件是DemoProject.cpp和DemoProject.vcxproj。前者是源碼文件后者是項(xiàng)目文件保存了編譯選項(xiàng)、包含目錄、依賴(lài)項(xiàng)等配置。搞清楚這兩個(gè)文件的區(qū)別是理解VS項(xiàng)目管理的第一步。項(xiàng)目文件本質(zhì)是一個(gè)XML配置如果你修改了編譯參數(shù)卻發(fā)現(xiàn)沒(méi)生效很可能改錯(cuò)了地方——所有項(xiàng)目相關(guān)的屬性都要通過(guò)“項(xiàng)目-屬性”頁(yè)面操作系統(tǒng)會(huì)自動(dòng)寫(xiě)入.vcxproj文件不建議手動(dòng)打開(kāi)編輯。在生成的源碼文件里先寫(xiě)一段基礎(chǔ)測(cè)試代碼#include iostream int main() { std::cout Hello, VS2019! std::endl; return 0; }點(diǎn)擊工具欄上的“本地Windows調(diào)試器”按鈕綠色播放鍵或者直接按F5編譯運(yùn)行。窗口里應(yīng)該會(huì)彈出一個(gè)命令行程序顯示剛才的輸出。這里如果遇到“無(wú)法啟動(dòng)程序系統(tǒng)找不到指定的文件”基本是編譯步驟還沒(méi)跑需要先按CtrlShiftB生成解決方案。3.2 解決方案與項(xiàng)目的層級(jí)關(guān)系VS2019采用“解決方案-項(xiàng)目-文件”的三層結(jié)構(gòu)。一個(gè)解決方案可以包含多個(gè)項(xiàng)目比如一個(gè)項(xiàng)目是核心算法庫(kù)另一個(gè)項(xiàng)目是單元測(cè)試還可以有一個(gè)主程序項(xiàng)目引用它們。在實(shí)際課程設(shè)計(jì)中經(jīng)常遇到提交作業(yè)時(shí)需要把多個(gè)小項(xiàng)目放在一個(gè)解決方案里操作方法是“文件-新建-項(xiàng)目”時(shí)勾選“添加到解決方案”。項(xiàng)目之間的引用關(guān)系也要搞清楚。右鍵項(xiàng)目名選擇“添加-引用”可以引用同解決方案下的其他項(xiàng)目或者瀏覽本地的.dll文件。鏈接時(shí)如果出現(xiàn)LNK2019這類(lèi)“無(wú)法解析的外部符號(hào)”錯(cuò)誤很大概率就是引用關(guān)系或者庫(kù)目錄配置有問(wèn)題后面我會(huì)細(xì)說(shuō)。3.3 調(diào)試器怎么用斷點(diǎn)的三個(gè)核心技巧VS2019的調(diào)試器是學(xué)習(xí)編程最強(qiáng)大的輔助工具之一很多人裝完IDE只用來(lái)“編譯運(yùn)行”完全沒(méi)發(fā)揮出調(diào)試器的價(jià)值。我給新手的建議是從第一個(gè)程序開(kāi)始就養(yǎng)成打斷點(diǎn)的習(xí)慣。點(diǎn)擊代碼左側(cè)的灰色邊欄會(huì)出現(xiàn)一個(gè)紅色圓點(diǎn)這就是斷點(diǎn)。按F5調(diào)試運(yùn)行程序會(huì)執(zhí)行到斷點(diǎn)處暫停。此時(shí)打開(kāi)“調(diào)試-窗口”菜單可以看到“監(jiān)視”“調(diào)用堆?!薄熬植孔兞俊钡却翱凇!熬植孔兞俊贝翱跁?huì)顯示當(dāng)前作用域內(nèi)所有變量的值“監(jiān)視”窗口可以手動(dòng)輸入變量名或表達(dá)式跟蹤。想一行一行看程序執(zhí)行過(guò)程按F10逐過(guò)程按F11逐語(yǔ)句——區(qū)別在于F11會(huì)進(jìn)入函數(shù)內(nèi)部F10不會(huì)。第二個(gè)核心技巧是“條件斷點(diǎn)”。右鍵斷點(diǎn)選擇“條件”可以設(shè)置表達(dá)式比如 x 5這樣循環(huán)一萬(wàn)次時(shí)你想在第特定次數(shù)停下來(lái)完全不用自己數(shù)著數(shù)刷新。第三個(gè)技巧是“即時(shí)窗口”調(diào)試暫停時(shí)可以在“調(diào)試-窗口-即時(shí)”里直接輸入表達(dá)式求值比如修改某個(gè)變量的值再繼續(xù)運(yùn)行用于測(cè)試不同分支邏輯非常方便比你重新編譯整個(gè)工程快得多。4. 日常開(kāi)發(fā)高頻功能拆解VS2019裝上后不是用來(lái)擺著看的真正要發(fā)揮價(jià)值有幾個(gè)高頻功能必須掌握。這些功能很多老手天天用新手卻根本不知道導(dǎo)致開(kāi)發(fā)效率差了好幾倍。4.1 快捷鍵與代碼補(bǔ)全的進(jìn)階使用先保存一套最高頻的快捷鍵快捷鍵功能使用場(chǎng)景CtrlKD格式化文檔代碼混亂時(shí)一鍵整理對(duì)齊F12跳轉(zhuǎn)定義查看函數(shù)、類(lèi)的實(shí)現(xiàn)CtrlF12轉(zhuǎn)到聲明查看函數(shù)或變量的聲明位置AltF12速覽定義不跳轉(zhuǎn)只浮窗預(yù)覽CtrlShiftB生成解決方案僅編譯不運(yùn)行CtrlF5開(kāi)始執(zhí)行不調(diào)試直接運(yùn)行程序F5開(kāi)始調(diào)試帶斷點(diǎn)調(diào)試運(yùn)行CtrlShiftF在文件中查找全局搜索字符串CtrlTab切換窗口/文件快速切換已打開(kāi)文件代碼補(bǔ)全I(xiàn)ntelliSense是VS的招牌功能輸入幾個(gè)字符就能彈出成員列表、參數(shù)提示和快速信息。遇到補(bǔ)全不彈的情況99%是輸出窗口里提示“IntelliSense引擎已停止工作”或項(xiàng)目配置錯(cuò)誤。解決辦法是刪除工程目錄下的.vs隱藏文件夾后重新打開(kāi)——這個(gè)hidden目錄保存了緩存狀態(tài)損壞時(shí)會(huì)導(dǎo)致各種奇怪表現(xiàn)。4.2 NuGet包管理器引用第三方庫(kù)的最省心方式在C#或者C/CLI項(xiàng)目里引第三方庫(kù)最友好的方式就是NuGet。在解決方案資源管理器中右鍵項(xiàng)目名選擇“管理NuGet程序包”切到“瀏覽”選項(xiàng)卡搜索你需要的庫(kù)點(diǎn)擊安裝。VS會(huì)自動(dòng)下載包、配置引用并寫(xiě)入項(xiàng)目文件。拿C項(xiàng)目來(lái)舉例很多人想用JSON解析庫(kù)手動(dòng)區(qū)分頭文件路徑、庫(kù)路徑、附加依賴(lài)項(xiàng)很容易配錯(cuò)。用NuGet搜“nlohmann.json”安裝后直接include就能用。它背后的原理是NuGet包本身帶有一整套針對(duì)不同平臺(tái)的目標(biāo)文件安裝器自動(dòng)把include目錄和lib目錄寫(xiě)進(jìn).vcxproj。庫(kù)里如果區(qū)分x86/x64記得把解決方案平臺(tái)和NuGet包保持同架構(gòu)否則會(huì)出現(xiàn)鏈接錯(cuò)誤。4.3 Git集成在VS2019里完成提交推送全流程VS2019內(nèi)置了Git管理工具菜單欄的“Git”菜單和“團(tuán)隊(duì)資源管理器”都可以操作。第一次使用時(shí)“視圖-團(tuán)隊(duì)資源管理器”打開(kāi)“管理連接”面板選擇“克隆”倉(cāng)庫(kù)地址即可把遠(yuǎn)程倉(cāng)庫(kù)拉取到本地??寺『笮薷拇a打開(kāi)“Git更改”窗口輸入提交說(shuō)明點(diǎn)擊“提交全部”即可創(chuàng)建本地提交。推送時(shí)點(diǎn)“推送”VS會(huì)把提交內(nèi)容上傳到遠(yuǎn)程倉(cāng)庫(kù)。和命令行Git相比VS內(nèi)置工具對(duì)新手更友好因?yàn)闆_突處理界面可視化能用圖形化方式選擇保留哪個(gè)版本。但我不建議完全拋開(kāi)命令行遇到復(fù)雜的rebase操作、分支合并沖突時(shí)Visual Studio的交互有時(shí)比較繁瑣命令行反而更清晰。一個(gè)實(shí)用的小技巧是在“工具-選項(xiàng)-源代碼管理”里把“當(dāng)前源控件插件”設(shè)置為Git這樣右鍵文件時(shí)會(huì)出現(xiàn)Git菜單項(xiàng)。4.4 擴(kuò)展與插件裝這幾個(gè)就夠了VS2019的擴(kuò)展生態(tài)非常成熟菜單“擴(kuò)展-管理擴(kuò)展”可搜索安裝。但不要貪多裝得太多IDE啟動(dòng)會(huì)變慢。我實(shí)測(cè)下來(lái)最值得裝的是這幾種CodeMaid代碼清理和整理工具一鍵移除未使用的using、格式化整個(gè)文件。Visual AssistC老牌增強(qiáng)插件補(bǔ)全和跳轉(zhuǎn)比原生更快但需要付費(fèi)學(xué)生黨可用免費(fèi)試用版。Markdown Editor內(nèi)置Markdown預(yù)覽寫(xiě)README非常方便。PowerShell Tools如果你需要寫(xiě)PowerShell腳本這個(gè)擴(kuò)展很實(shí)用。裝上擴(kuò)展后如果IDE響應(yīng)變慢打開(kāi)“擴(kuò)展-管理擴(kuò)展”禁用不用的項(xiàng)。VS的擴(kuò)展本質(zhì)是加載到IDE進(jìn)程的插件資源消耗是線性疊加的適度使用才安全。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄最后這部分是我最想分享的。網(wǎng)上教程大多止步于“安裝成功”但真實(shí)開(kāi)發(fā)中會(huì)遇到一堆環(huán)境、編譯、鏈接層面的問(wèn)題。下面這幾種是我實(shí)際遇到和幫助別人解決過(guò)的高頻問(wèn)題值得你收藏備用。5.1 安裝卡住或失敗如何定位與解決安裝過(guò)程中最常見(jiàn)的問(wèn)題是卡在“正在處理”或提示“連接網(wǎng)絡(luò)時(shí)出錯(cuò)”。先排除幾個(gè)因素關(guān)閉殺毒軟件和系統(tǒng)防火墻因?yàn)樗鼈儠?huì)攔截VS安裝器與官方服務(wù)器的通信。然后以管理員身份重新運(yùn)行安裝器。如果還是卡住刪除C:\ProgramData\Microsoft\VisualStudio\Packages目錄下的緩存文件前提是你已經(jīng)放棄當(dāng)前安裝重新啟動(dòng)安裝器。另一個(gè)問(wèn)題是安裝時(shí)提示磁盤(pán)空間不足卻明明有很多空間——這是系統(tǒng)分區(qū)與緩存分區(qū)不一致導(dǎo)致的。回到安裝器里把下載緩存路徑改到剩余空間充足的磁盤(pán)或者在命令行安裝時(shí)加--cache參數(shù)指定緩存目錄。千萬(wàn)別把VS安裝在C盤(pán)但又不改緩存路徑這是C盤(pán)爆滿最常見(jiàn)的元兇。5.2 編譯報(bào)錯(cuò)LNK1104/LNK2019鏈接錯(cuò)誤的根源編譯階段通過(guò)了但鏈接報(bào)錯(cuò)一般和頭文件無(wú)關(guān)而是庫(kù)文件路徑或符號(hào)問(wèn)題。LNK1104“無(wú)法打開(kāi)文件xxx.lib”經(jīng)常是庫(kù)目錄沒(méi)配好或者庫(kù)文件名拼錯(cuò)了。解決辦法右鍵項(xiàng)目-屬性-鏈接器-常規(guī)-附加庫(kù)目錄填入.lib文件所在目錄鏈接器-輸入-附加依賴(lài)項(xiàng)填入具體的.lib文件名。LNK2019“無(wú)法解析的外部符號(hào)”則要區(qū)分情況。如果是自己寫(xiě)的函數(shù)報(bào)錯(cuò)檢查函數(shù)聲明和定義是否一致包括大小寫(xiě)、參數(shù)類(lèi)型——C編譯器對(duì)符號(hào)進(jìn)行了名稱(chēng)修飾參數(shù)不對(duì)就匹配不上。如果是第三方庫(kù)比如OpenCV報(bào)錯(cuò)檢查庫(kù)版本與項(xiàng)目平臺(tái)是否一致Debug和Release、x86和x64對(duì)應(yīng)的庫(kù)文件是不同的混用就會(huì)出現(xiàn)外部符號(hào)無(wú)法解析。5.3 調(diào)試器斷點(diǎn)不生效你可能忽略了這些原因斷點(diǎn)顯示空心圓程序運(yùn)行時(shí)不暫停是新手很困惑的常見(jiàn)問(wèn)題。最直接的原因是編譯配置是Release模式。Release模式下編譯器會(huì)做大量?jī)?yōu)化代碼行和機(jī)器指令的對(duì)應(yīng)關(guān)系不再清晰斷點(diǎn)功能基本失效。把解決方案配置切換成Debug再調(diào)試這是最根本的解法。還有一個(gè)隱蔽的原因是“只我的代碼”功能與符號(hào)加載狀態(tài)。VS默認(rèn)啟用“工具-選項(xiàng)-調(diào)試-常規(guī)-啟用‘僅我的代碼’”對(duì)于引用外部DLL的項(xiàng)目外部代碼默認(rèn)不可調(diào)試。取消勾選這一項(xiàng)再勾選“源服務(wù)器支持”——后者用于從符號(hào)服務(wù)器下載第三方庫(kù)的調(diào)試符號(hào)。由于調(diào)試符號(hào)可能加載較慢斷點(diǎn)可能會(huì)變成白色并提示“未加載符號(hào)”此時(shí)右鍵模塊窗口中的dll選擇“加載符號(hào)”即可。5.4 啟動(dòng)變慢與閃退環(huán)境清理的方法VS2019用久了會(huì)變得臃腫啟動(dòng)要十幾秒甚至出現(xiàn)閃退。先檢查C盤(pán)剩余空間很多閃退是磁盤(pán)空間不足導(dǎo)致的臨時(shí)文件寫(xiě)入異常。然后執(zhí)行“工具-獲取工具和功能”在VS Installer里打開(kāi)“單個(gè)組件”把不需要的語(yǔ)言包和組件取消勾選執(zhí)行修改清理掉冗余組件。如果IDE閃退且重啟無(wú)效可以用命令行重置環(huán)境。先關(guān)閉VS然后在“開(kāi)發(fā)者命令提示符”里執(zhí)行devenv /resetuserdata這個(gè)命令會(huì)把VS的用戶(hù)級(jí)配置恢復(fù)到初始狀態(tài)不會(huì)影響項(xiàng)目文件但會(huì)清掉你設(shè)置過(guò)的主題和自定義快捷鍵。這個(gè)方法是我處理各種疑難雜癥的最后一招實(shí)測(cè)成功率很高。5.5 網(wǎng)上說(shuō)的“產(chǎn)品密鑰”和“離線安裝包”到底靠不靠譜回到熱搜詞里的幾個(gè)高頻搜索我在這里統(tǒng)一回應(yīng)一下。“VS2019產(chǎn)品密鑰”這個(gè)搜索詞對(duì)社區(qū)版沒(méi)有意義對(duì)專(zhuān)業(yè)版/企業(yè)版建議直接官方購(gòu)買(mǎi)或試用別下載來(lái)路不明的“激活工具”有安全風(fēng)險(xiǎn)而且違反協(xié)議?!半x線安裝包”倒是很務(wù)實(shí)的方向——官方安裝器因?yàn)榫W(wǎng)絡(luò)原因經(jīng)常中斷用我前面講過(guò)的--layout方式做離線包是最正規(guī)的做法。第三方網(wǎng)盤(pán)分享的所謂離線安裝包強(qiáng)烈建議下載后核對(duì)哈希并且必須從可信來(lái)源獲取否則極易植入惡意文件。還有一類(lèi)問(wèn)題關(guān)于“如何修改安裝目標(biāo)路徑”比如熱詞里提到的“安裝在D:/program files/vs2019中”。在安裝器啟動(dòng)后的“安裝位置”選項(xiàng)卡里直接改路徑是標(biāo)準(zhǔn)做法但注意VS2019的C工具鏈和Windows SDK會(huì)有一部分默認(rèn)落在C:\Program Files (x86)\Windows Kits下這是微軟的硬性設(shè)計(jì)不建議強(qiáng)行改動(dòng)注冊(cè)表去遷移否則可能引發(fā)編譯環(huán)境損壞。如果你非常在意系統(tǒng)盤(pán)空間正確思路是給C盤(pán)做清理而不是強(qiáng)行把SDK遷走。寫(xiě)在最后的一點(diǎn)個(gè)人經(jīng)驗(yàn)VS2019到現(xiàn)在仍然是我電腦上保留的IDE之一。雖然VS2022出來(lái)以后我主力已經(jīng)切換過(guò)去了但是遇到老項(xiàng)目、課程作業(yè)、或者需要快速驗(yàn)證一段C代碼時(shí)VS2019的穩(wěn)定性和輕量程度反而有優(yōu)勢(shì)。如果你正在學(xué)C/C或者C#我的建議是先老老實(shí)實(shí)把這篇教程里的安裝步驟走一遍然后花十分鐘把常用快捷鍵和調(diào)試器用熟——這十分鐘的投入會(huì)在你之后幾個(gè)月寫(xiě)代碼時(shí)持續(xù)回本。還有一個(gè)小技巧分享給你VS2019支持多個(gè)實(shí)例同時(shí)打開(kāi)你可以在一個(gè)實(shí)例里開(kāi)著課程項(xiàng)目另一個(gè)實(shí)例里開(kāi)著個(gè)人練手項(xiàng)目互不干擾也不會(huì)因?yàn)榍袚Q工程而丟失未保存的上下文。配合“窗口-新建窗口”的拆分布局一邊看資料一邊寫(xiě)代碼非常舒服。寫(xiě)代碼這條路上工具只是第一步真正讓你成長(zhǎng)的是在一個(gè)能正常編譯、流暢調(diào)試的環(huán)境里持續(xù)地寫(xiě)、錯(cuò)、改。希望這篇教程能幫你把環(huán)境這一步走得順一點(diǎn)。