- C/C++代碼調(diào)試的藝術(shù)(第2版)
- 張海洋
- 1991字
- 2023-06-21 18:59:24
2.1 Visual C++簡介
Visual C++(簡稱為Visual C++、MSVC、VC++、VC,為了方便起見,后續(xù)簡稱為VC)是微軟的C++開發(fā)工具,具有集成開發(fā)環(huán)境,可提供編輯、編譯、調(diào)試C/C++等編程語言的功能。VC提供了強大的調(diào)試工具,方便開發(fā)人員迅速發(fā)現(xiàn)和定位BUG,從而快速地修復(fù)BUG。目前VC最新的版本是VC 2022。
VC對C語言和C++語言的支持緊密結(jié)合C和C++標準,VC 2015基本上支持C99標準,VC 2017支持C++17標準,VC 2019支持C++20標準的大部分核心功能以及幾乎全部C++20標準庫。
對于熟練使用VC的用戶,VC是Windows軟件開發(fā)的一大利器,簡直無所不能。而對于不太熟悉VC的用戶,VC只能用來開發(fā)Windows軟件,而且僅限于Windows應(yīng)用層軟件。隨著VC近年來的不斷升級,其功能和特性已經(jīng)發(fā)生了巨大變化,用戶可以使用VC集成開發(fā)環(huán)境輕松開發(fā)Windows應(yīng)用層軟件,還可以開發(fā)Windows內(nèi)核驅(qū)動程序。對于想學(xué)習(xí)Windows驅(qū)動開發(fā)的讀者,VC集成開發(fā)環(huán)境還提供了巨大的便利,不但降低了開發(fā)驅(qū)動的門檻,而且大大縮短了開發(fā)周期,效率也得到了提高。更重要的是,雖然以前能夠使用VC來開發(fā)Windows驅(qū)動,但僅僅是使用VC來編輯代碼,如果要對代碼進行編譯,通常需要以命令行的方式來進行,這非常不方便,而且需要借助其他調(diào)試工具(比如WinDbg)來進行內(nèi)核調(diào)試。現(xiàn)在,這個局面已經(jīng)得到了徹底的改觀,新版本的VC(比如VC 2019)開發(fā)Windows內(nèi)核驅(qū)動的方式已經(jīng)與開發(fā)普通的應(yīng)用層程序的方式基本一致,內(nèi)核的雙機調(diào)試也更方便。本書后續(xù)章節(jié)會對Windows驅(qū)動開發(fā)進行簡單的介紹。
VC的另一個變化就是開發(fā)平臺的功能更加完善。圖2-1是VC 2019創(chuàng)建C++項目的平臺選擇界面。C++項目可以支持更多平臺和類型,比如可以在Windows系統(tǒng)中使用VC開發(fā)Linux應(yīng)用,甚至iOS、Android等應(yīng)用。以前在創(chuàng)建Linux系統(tǒng)下的C++項目時,一般都是在Windows系統(tǒng)中使用圖形化的代碼編輯工具(比如Source Insight等)進行編輯,再通過文件傳輸工具傳輸?shù)絃inux系統(tǒng)中進行編譯、測試和運行。一旦發(fā)現(xiàn)編譯有錯誤或者代碼有BUG,就需要修改代碼之后再回傳到Linux系統(tǒng)中。如此反復(fù),效率非常低下,這是因為通過Linux命令行編寫大規(guī)模的代碼確實不方便,尤其是有多個模塊時,來回切換代碼文件十分煩瑣。

圖2-1 VC 2019創(chuàng)建C++項目的平臺選擇界面
由于VC 2019的出現(xiàn),效率低下這一情況得到極大改善。通過VC 2019可以直接創(chuàng)建Linux系統(tǒng)下的C++項目,并在VC 2019中進行編碼、編譯、調(diào)試和測試,與開發(fā)普通的Windows系統(tǒng)應(yīng)用程序一樣方便。本書后面也會有專門的章節(jié)來簡單介紹如何使用VC進行Linux程序的開發(fā)和調(diào)試。
盡管VC的版本已經(jīng)更新至2022版,但是本書中所討論的調(diào)試技術(shù)的核心幾乎沒有變化,即使是使用VC 6等早期版本,大多數(shù)功能也是適用的,只有少數(shù)功能是VC較高版本才具有的,比如遠程調(diào)試Linux程序、開發(fā)調(diào)試Windows驅(qū)動等功能,需要用到VC 2017或者更高版本。
雖然本書的核心調(diào)試技術(shù)幾乎在所有的VC版本中都可以體現(xiàn),但是為了能夠領(lǐng)略新技術(shù)帶來的便利并讓大家感受到VC的新特性,本書以目前最新的VC 2019作為演示軟件。
2.1.1 VC 2019版本選擇
Visual Studio 2019共有3個版本:社區(qū)版、專業(yè)版和企業(yè)版。其中專業(yè)版和企業(yè)版需要收費,而社區(qū)版是免費的。雖然3個版本所支持的功能有一些區(qū)別,但是本書中使用的調(diào)試技術(shù)得到3個版本的支持,讀者可以免費下載Visual Studio 2019社區(qū)版。因為我們只需要VC的一部分功能,其他很多功能在本書中沒有涉及。Visual Studio 2019的3個版本的異同如表2-1所示。
表2-1 Visual Studio 2019的3個版本的異同

其中社區(qū)版不允許企業(yè)用戶(企業(yè)用戶指的是超過250臺PC或年收入超過100萬美元的組織)使用,對本書中要使用的功能沒有任何限制。另外一個區(qū)別是社區(qū)版只支持部分高級調(diào)試功能。在Visual Studio 2019中,高級調(diào)試功能主要包括表2-2所示的幾個方面。
表2-2 Visual Studio 2019高級調(diào)試功能

下面簡單介紹Visual Studio 2019社區(qū)版不支持的高級調(diào)試功能。
● 智能追蹤:可以記錄和追蹤代碼執(zhí)行的歷史信息,記錄特殊的事件、調(diào)試過程中局部變量窗口中的相關(guān)代碼、數(shù)據(jù)以及函數(shù)調(diào)用信息等。智能追蹤可以幫助開發(fā)人員更便捷地發(fā)現(xiàn)BUG,并追蹤BUG出現(xiàn)的原因。
● 代碼映射調(diào)試器集成:調(diào)試時生成代碼的映射關(guān)系,比如各個模塊、各個文件之間的調(diào)用關(guān)系等。對于一些大型項目,調(diào)試時理解代碼之間的關(guān)系對后期工作非常有幫助。
● .NET內(nèi)存轉(zhuǎn)儲分析:針對.NET的dump文件分析。
● 快照調(diào)試程序:主要是針對微軟云(Azure)應(yīng)用服務(wù)程序的一種調(diào)試技術(shù),可以理解為現(xiàn)有調(diào)試技術(shù)的綜合體,比如遠程調(diào)試、dump文件分析等。在生產(chǎn)環(huán)境中運行時,如果執(zhí)行到應(yīng)用程序的某行代碼,就會自動創(chuàng)建一個該應(yīng)用程序的快照(dump)文件,而不會影響現(xiàn)有應(yīng)用程序的執(zhí)行,因此可以遠程分析該dump文件。未來該技術(shù)可能也會應(yīng)用到Azure的虛擬機快照中。
● 按時間順序查看調(diào)試:可以簡單地理解為錄像機,即對代碼的執(zhí)行過程進行“錄像”,還可以執(zhí)行回放操作,這對于分析BUG的產(chǎn)生過程是非常有用的。
2.1.2 VC 2019安裝
Visual Studio 2019社區(qū)版可以從微軟官方地址下載。
建議選擇下載中文版,本書中的軟件界面也都會是中文顯示。在安裝時需要注意,在“工作負載”選項卡中選中“使用C++的桌面開發(fā)”和“使用C++的Linux開發(fā)”兩項,并勾選圖2-2和圖2-3所示的可選項。

圖2-2 選中“使用C++的桌面開發(fā)”

圖2-3 選中“使用C++的Linux開發(fā)”
- Visual C++程序設(shè)計學(xué)習(xí)筆記
- 大學(xué)計算機應(yīng)用基礎(chǔ)實踐教程
- C語言程序設(shè)計基礎(chǔ)與實驗指導(dǎo)
- 面向STEM的Scratch創(chuàng)新課程
- NumPy Essentials
- PHP+MySQL+Dreamweaver動態(tài)網(wǎng)站開發(fā)實例教程
- Mastering RStudio:Develop,Communicate,and Collaborate with R
- 從0到1:Python數(shù)據(jù)分析
- Visual Basic程序設(shè)計實驗指導(dǎo)(第二版)
- Vue.js 2 Web Development Projects
- Python3.5從零開始學(xué)
- 零基礎(chǔ)學(xué)C語言第2版
- Orleans:構(gòu)建高性能分布式Actor服務(wù)
- Java EE項目應(yīng)用開發(fā)
- 原型設(shè)計:打造成功產(chǎn)品的實用方法及實踐