Visual Studio 2022 17.7

| | 0 Comments| 10:01
Categories:

Visual Studio 2022 這季的更新來了~這次的版本是 17.7,官方公告是《Visual Studio 2022 – 17.7 Now Available》、C++ 的部分也有彙整一份《What’s New for C++ Developers in Visual Studio 2022 17.7》。

官方這次把更新內容分成下面幾個領域:

  • 生產力功能
  • 效能改善
  • .NET 開發
  • C++ 與遊戲開發
  • C++ 的 Linux 與嵌入式環境開發
  • 網頁開發
  • 企業管理

而這邊,Heresy 就來記錄一下自己有興趣的部分了~


檔案比較

這次改版後,在方案總管裡面加入了檔案比較的功能。

在選擇單一檔案的狀況下,右鍵選單會有「相較於…」的選項,點選後就會讓使用者選取另一個檔案來比對。

而如果是在方案總管裡面選了兩個檔案的話,那右鍵選單會變成「已選取比較」(感覺有點詭異的翻譯),點選後會直接比較這兩個檔案。

 

這邊比較討厭的,是檔案選取的時候似乎不能跨專案;如果要比較兩個不同專案的檔案,就只能用前面的「相較於…」了。

至於檔案比對的介面,基本上應該就和整合 Git 的比較工具一樣了~個人覺得算是滿好用的。


程式碼複製時自動修正縮排

以往要複製程式碼的時候,如果是局部複製的話,常常都必須要手動修正程式碼。例如下面的狀況:

這樣貼到別的地方,基本上會變成:

void show_file_dialog()
	{
		widget->show();
	}

得要自己把第二行開始的縮排刪除才會比較好看。

而在更新到 17.7 後,複製這樣的程式碼的時候,它會自動去處理縮排,所以可以得到比較好的結果!如果有需要的話,這個功能確實會方便很多!

不過,比較可惜的,是這項功能似乎和官方的 Productivity Power Tools 這個延伸模組(官網之前版本的介紹)的「Copy As Html 2022」衝突,在開啟這個功能的狀況下,似乎就不會自動處理縮排了。


Git 顯示多分支

在選單的「Git」、「管理分支」開啟的「Git 存放庫」視窗中,加入了對應 Git 的分支(branch)的功能。

這樣的功能基本上可以方便在不同分支間,進行檔案的比較、或是進度的確認。

不過由於 Heresy 這類的操作大多是使用 TortoiseGit 來進行,所以用到的機會其實不大。


C++ 建置深入解析(Build Insight)

「C++ Build Insight」是一個用來分析 C++ 建置過程的工具,他應該是在 2019 的時候、以獨立的額外工具的形式存在的(參考《Introducing C++ Build Insights》);而在這個版本開始,則是整合進入 Visual Studio 了~

不過,他是一個選擇性元件,所以不見得預設會有安裝,所以使用前可能要透過 Visual Studio Installer 確認一下自己有沒有安裝。

在有安裝的狀況下,方案和專案的右鍵選單裡就會出現「深入解析」的相關選項了~使用這個形式來建置的話,他就會在建置完成後自動開啟產生的報告、讓開發者來分析建置速度的門檻在哪了。


C++ 巨集視覺化擴充(Visualize Macro Expansion for C++)

17.5 的時候,Visual Studio 加入了巨集(macro)的展開功能,方便確認巨集實際上的效果。而這個版本,則是在巨集展開的結果窗格裡面,多加了一個「視覺化擴充」的選項:

點選之後,他會在編輯器右下角多一個窗格出來,顯示巨集的內容。在左上角會有擴充步驟、在右上角會有往前、往後的箭頭,讓使用者自己決定要展開到哪一步。

不過這邊必須說…以 Boost Test 的巨集來說,還是完全看不懂啊。 XD


清除 C++ 不需要的 header(請小心使用)

C++ IntelliSense 的新功能,預設沒有開啟,要開啟的話,可以點選工具列的「工具」、「選項」,在設定視窗中找到「文字編輯器」下的「C/C++」、「IntelliSense」,之後右邊會有「啟用 #include 清除」的選項。

開啟之後,他會把檔案中沒有用到的 header 檔顏色調淡、在滑鼠移上去後也會告知它在這個檔案中沒有被用到、可以移除。

而點選前方的燈泡後,也可以選擇移除單一項目、還是把所有沒使用的都移除。

感覺好像很方便?不過實際上這項功能在使用上要小心。因為 Heresy 這邊在試著玩的時候,就發現它的判斷問題還滿多的、可能會把實際上需要的項目也也當作不需要的。

例如下面的程式碼:

#ifdef _WIN32
#include <windows.h>
#else
#include <time.h>
#endif

由於 MSVC 只處理 C++ 的部分,所以它會把 <time.h> 判斷成用不到的、然後把它移除掉…結果等要建置 Linux 版本的時候,就會出錯了。 XD

此外,如果把部分共用的 header 都放在一個 common.h 裡面、做統一的 include,這種情境似乎也會整個判斷錯誤。

而在 Qt 的專案裡面,感覺上他會把所有 Qt 的 header 都判斷成不需要的?

所以使用的時候…最好自己不要用移除所有的選項、而是自己一個一個確認會比較好。有興趣的話,也可以參考《#include cleanup in Visual Studio》這篇,下面也有很多錯誤狀況的討論。


平行堆疊的篩選(Parallel Stack Filtering)

在開發多執行序程式偵錯的時候,可以透過「偵錯」、「視窗」、「平行堆疊」來樹狀圖的形式顯示不同執行序的呼叫堆疊狀況。

而這個版本則是加入篩選的功能,讓使用者可以調整要顯示的內容,簡化顯示的結果。

不過老實說,個人沒什麼用到這個功能就是。


F5 加速

應該是針對 PDB(Program Database)檔案最佳化、進而改進偵錯時的效能。以 Unreal Engine 專案來說,他號稱提高了 21% 的速度(19s 縮短到 15s)。

此外,偵錯器(debugger)執行速度也提高了 5~10%。


方案總管摺疊所有子項

算是一個小功能,在方案總管裡面,透過「Ctrl + 左鍵」的話,可以把底下所有項目都設定為摺疊狀態。在想要快速把所有展開的項目都摺疊起來的時候,會相當方便。


其他其實也還有不少功能的更新,不過個人覺得對自己比較有用的大概就這些了?

如果有在使用 Unreal Engine 的話,其實這次有不少改善是針對 Unreal Engine 的整合的,所以應該會有相當地幫助?但是因為個人沒再用,所以也感覺不出來了。

最後,有興趣的話也可以參考官方的 release note 來看更多的細節。


附帶一提,個人覺得 Visual Studio 很多中文版的翻譯越來越詭異了…其實從把「OpenMP」翻譯成「開啟 MP」開始,個人總覺得微軟越來越多地方是使用自動翻譯了…

而這次更新的很多項目,更讓 Heresy 覺得應該是機器翻譯出來就直接用了…

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *