03.07 持續集成利器:C++ Build Insight SDK發佈

官宣C++ Build Insights SDK

今天,我們很高興的宣佈C++ Build Insights SDK正式發佈。它是一個編程框架,通過編寫C或者C++代碼,我們可以調用這個框架來獲取MSVC編譯過程中產生各種信息。同時為了配合這次發佈,我們還在GitHub上開源了vcperf,因為vcperf這個工具本身也使用到了這個SDK,在開發你自己的工具時,你可以將vcperf作為一個參考。我們期待著你通過這套編程框架開發出來的各種應用和你的使用反饋。

背景知識

去年11月的時候,我們宣佈了[vcperf and its Windows Performance Analyzer (WPA) plugin]裡幫助開發者獲取MSVC的編譯信息。實際上,這兩個組件的底層也使用到了C++ Build Insights。那麼,C++ Build Insights到底是什麼呢?

我們之前已經提起過,C++ Build Insights是基於Event Tracing for Windows (ETW)組件的,ETW是Windows操作系統平臺上的一個十分方便好用的追蹤機制。但是ETW對於我們的客戶所開發的大型C++工程來說還是不夠的。我們對事件模型和分析算法進行了優化,這一工作的結果產生了一種針對MSVC的新的分析平臺,現在我們管它叫”C++ Build Insights”。

我們開發的vcperf和一些其他的內部工具都是基於C++ Build Insights的。但是,我們希望開發者也可以能用到這套編程框架來開發他們自己的應用。因此,我們將這套分析平臺進行了打包並通過CC或者C++來暴露出使用接口,也即,我們為開發者提供了一套成熟可用的SDK。

讓我們開始吧!

如果你有如下的使用場景,你就可以使用C++ Build Insights SDK來開發自己的工具:

1. 以程序化的方式分析輸出,而不是藉助於WPA。

2. 經工程編譯信息分析整合到你的持續集成(CI)中。

3. 當成一個小玩具,玩一玩。

下面的例子展示瞭如何使用這套SDK。在這個例子中,它顯示瞭如何編寫一個顯示出所有生成時間大於500毫秒的函數的應用程序。

持續集成利器:C++ Build Insight SDK發佈

使用步驟如下

1. 下載並安裝Visual Studio 2019。

2. 獲取你的工程編譯分析報告

2.1 啟動[VS2019 x64 Native Tools]命令行提示

2.2 執行指令:[vcperf /start MySessionName]

2.3 從任何地方編譯你的工程,即使是在Visual Studio裡編譯也可以,因為vcperf經收集整個系統裡的編譯信息。

2.4 執行指令:[vcperf /stopnoanalyze MySessionName outputFile.etl]。這條指令將獲取到的編譯分析結果保存到文件[outputFile.etl]中。

3. 啟動Visual Studio並創建一個新的C++工程

4. 在你的工程上右鍵,選擇[Manage NuGet packages…]並從官方nuget.org上安裝最新的Microsoft.Cpp.BuildInsights NuGet。安裝前,你需要點擊接受許可協議。

5. 輸入如下的代碼。

6. 傳入[outputFile.etl]的路徑作為第一個參數進行編譯並運行。

持續集成利器:C++ Build Insight SDK發佈

持續集成利器:C++ Build Insight SDK發佈

大家可以在我們的[C++ Build Insights samples GitHub repository]上找到一份可以克隆並編譯的工程例子。除了可以通過執行vcperf工具來獲取編譯信息,開發者還可以通過調用我們的SDK來獲取信息,具體請參考C++ Build Insights SDK的文檔。

vcperf現已開源vcperf

這個工具本身就是基於C++ Build Insights SDK的,今天我們將vcperf在GitHub上開源了。我們希望這次開源,可以讓我們的開發者可以學到關於SDK的更多知識,並可以對vcperf進行定製開發來滿足各自的需求。在倉庫中包含了一個例子,它擴展了vcperf工具來偵測鏈接器因為錯誤條件而導致的重啟。例子中凸顯了在C++ Build Insights的[Build Explorer]視圖中的一些特性,我們建議大家使用如下的順序來閱讀這個例子代碼:

1. RestartedLinkerDetector.h

2. BuildExplorerView.cpp

3. Commands.cpp

為什麼你需要從GitHub上編譯並運行vcperf呢?因為在當前發佈的vcperf中還有一些不被支持的事件類型,包括新的模板實例化事件。通過這種方法,你可以自行開發支持這類新事件。另外,vcperf並沒有綁定在任何特定的Visual Studio版本,以上說的新的shiji只在Visual Studio 2019 v16.4及以上版本才被支持。

下面是更新後的事件表格:

持續集成利器:C++ Build Insight SDK發佈

總結

對於大型C++工程,獲取編譯過程中產生的各類信息對於持續集成,自動化構建都有十分重要的作用。但是,目前我的工程還不是很大,好像還用不上,等個幾年後再說吧。


分享到:


相關文章: