自定義Visual Studio調試器中的對象顯示方式

你有沒有盯着調試器窗口中的對象,並但願你能夠經過其餘類型的東西來查看這些對象?我固然有!擴展項目以肯定每一個人的身份可能會很是快速。理想狀況下,經過特定的屬性值快速定位它們會很棒。對咱們來講幸運的是,Visual Studio有兩個鮮爲人知的屬性,即託管用戶稱爲DebuggerDisplay,本地C ++用戶稱爲Natvis經過這些屬性,您能夠自定義在調試器窗口中查看對象的方式,例如Watch,Autos,Locals和datatips!性能

具備和不具備DebuggerDisplay屬性的Locals和DataTips窗口附加到代碼圖1 - 帶有和不帶DebuggerDisplay屬性的Locals和DataTips窗口附加到代碼spa

 

什麼是DebuggerDisplay屬性?

經過在類的頂部編寫DebuggerDisplay語法,您能夠在調試器窗口中的每一個對象節點的頂部選擇所需的字符串和屬性。除了在調試器窗口中顯示字符串外,在DebuggerDisplay屬性中添加花括號({})容許Visual Studio顯示您指定的屬性或方法的值。您還能夠向DebuggerDisplay 添加格式說明符,以便進一步更改在調試器窗口中顯示和格式化值的方式。在圖2中,DebuggerDisplay附加格式說明符「nq」(無引號)。生成的顯示將顯示字符串屬性Title而不包含周圍的引號。.net

Basic DebuggerDisplay語法添加到Book類的頂部圖2 - 添加到Book類頂部的Basic DebuggerDisplay語法debug

 

將具備上述DebuggerDisplay語法的Locals窗口添加到代碼中圖3 - Locals窗口,上面的DebuggerDisplay語法添加到代碼中調試

 

執行此任務的先前解決方法是覆蓋類的ToString()方法。相比之下,DebuggerDisplay控制項目的顯示方式而不 覆蓋該方法。所以,若是您不想在ToString()方法中調試相關內容(特別是在實際程序中調用該方法時),那麼DebuggerDisplay就是您的最佳選擇!orm

 

我能夠在調試器窗口中顯示每一個對象的表達式嗎?

有時您可能但願在調試器窗口中顯示錶達式。好消息:您可使用DebuggerDisplay屬性顯示錶達式!對象

 

包含表達式的DebuggerDisplay屬性的示例圖4 - 包含表達式的DebuggerDisplay屬性示例blog

 

具備上述DebuggerDisplay語法並添加了表達式評估的Locals窗口圖5 - 具備上述DebuggerDisplay語法和添加的表達式評估的Locals窗口ip

 

壞消息:在調試代碼時,DebuggerDisplay表達式可能會致使其餘問題。潛在問題包括大型或複雜表達式的性能命中,表達式語言與正在調試的語言不一樣時的編譯和運行時錯誤,以及表達式變異屬性時應用程序狀態更改。ci

 

圖6  - 添加了Visual Basic樣式三元表達式語法的DebuggerDisplay屬性圖6 - 添加了Visual Basic樣式三元表達式語法的DebuggerDisplay屬性

 

圖7  - 在C#中調試時使用上面的Visual Basic樣式語法後收到的運行時錯誤圖7 - 在C#中調試時使用上面的Visual Basic樣式語法後收到的運行時錯誤

 

但不要懼怕!使用表達式減小這些潛在問題的一種方法是建立一個私有屬性或方法,該屬性或方法返回已執行表達式的字符串並告知DebuggerDisplay顯示該屬性。

 

圖8  - 建立包含DebuggerDisplay引用的更復雜表達式和格式的私有屬性圖8 - 建立包含DebuggerDisplay引用的更復雜表達式和格式的私有屬性

 

圖9  - 建立一個包含DebuggerDisplay引用的更復雜表達式和格式的方法圖9 - 建立一個包含DebuggerDisplay引用的更復雜表達式和格式的方法

 

與C ++用戶的DebuggerDisplay等效的功能是什麼?

DebuggerDisplay與C#,F#和Visual Basic兼容,但若是你在C ++中調試,Natvis是一個很好的選擇!雖然不像在DebuggerDisplay類的頂部添加語法那麼簡單,可是將.natvis文件添加到項目中能夠自定義對象的顯示方式。

 

圖10  - 在Locals窗口中使用Natvis的示例圖10 - 在Locals窗口中使用Natvis的示例

 

Solution Explorer中右鍵單擊C ++項目節點,選擇Add > New Item,而後選擇Visual C ++> Utility> Debugger可視化文件(.natvis)結果是一個XML文件,您能夠在其中控制調試時顯示的屬性。

 

圖11-對應於上面顯示的顯示的示例Natvis文件圖11-對應於上面顯示的顯示的示例Natvis文件

 

要了解有關在調試C ++項目時使用Natvis的更多信息,請查看文檔

 

這些功能很是棒,能夠節省不少時間!如何幫助與其餘人共享DebuggerDisplay和Natvis?

有趣的事實:DebuggerDisplay和Natvis屬性已經在Visual Studio中使用多年了!這些屬性對大多數開發人員很是有用,但仍然不像它們能夠發現和衆所周知的那樣。所以,咱們目前正在努力提供一種更簡單的方法來更好地發現這些屬性,您的反饋將有助於實現這一目標!完成此調查,這將使咱們可以在使用這些屬性時提供改進的體驗。

相關文章
相關標籤/搜索