Dot-Net
Win32 控制台應用程序與 CLR 控制台應用程序
我正在開發一個我不打算使用 .NET 庫或工具開發或部署的 C++ 項目,這意味著使用 Visual Studio Win32 控制台應用程序創建它對我來說是有意義的。但是,我聽說在 Visual Studio 下使用 CLR 應用程序時的調試能力要強大得多。所以我有幾個問題:
- 即使您不使用任何 .NET 庫或其他資源,擁有 CLR 應用程序與 Win32 應用程序是否會為您的開發過程增加功能?
- 如果是這樣,即使我正在使用 STL 等開發純 C++ 項目並且不利用任何 .NET 功能,我是否仍然能夠將項目開發/編譯為 CLR 項目以利用這些項目?或者這樣的項目是否需要根本的差異,這將使得恢復變得不那麼簡單,這意味著我應該堅持使用 Win32 控制台應用程序?
底線答案是,如果您從不打算在應用程序中使用 CLR 或任何 .Net 對象,只需使用普通的 Win32 C++ 庫。做任何其他事情都會讓你在路上痛苦。
現在,要回答有關調試的原始問題,是的,使用 CLR 進行調試比調試普通 C++ 應用程序具有一定的優勢。從 Visual Studio 2005 開始,C# 和 VB.Net 都開始專注於使 locals/autos/watch 視窗中的變數顯示更有價值。主要是通過引入 .Net 屬性如 DebuggerDisplay、DebuggerTypeProxy 和視覺化框架來完成的。
但是,如果您不使用任何 .Net 類型,您將不會獲得這些好處。
C++ 表達式求值器沒有利用任何這些。它有自己的自定義類型顯示的方法。但它不像屬性樣式那樣有特色(或潛在危險),因為它不允許程式碼在被調試程序中執行。
這並不是說調試 C++ 提供了糟糕的體驗。它只是不同,對於許多 STL 容器類型有更好的顯示。
調試 CLR 應用程序也有一些缺點。例如,調試優化程式碼有時幾乎是不可能的,因為 JITer 會隱藏局部變數、參數,並且通常會隱藏“this”。調試一個類似構造的 C++ 應用程序也可能令人沮喪,但您總是可以抓住寄存器並拆開看看發生了什麼。為 CLR 應用程序做同樣的事情充其量是困難的。