2010-12-17 34 views
17

我喜歡DebuggerDisplay屬性。我非常喜歡它,所以我想在我沒有源代碼的類型上使用它。DebuggerDisplay屬性可以應用於一個不具有的類型嗎?

這可能嗎?

+0

一些希望程序集級別的DebuggerTypeProxy可以工作。它沒有。 – 2010-12-17 13:20:17

+0

@Hans Passant - 我自己並沒有嘗試過,但是這篇文章http://blog.jalil.org/2008/02/18/how-to-determine-event-subscribers/展示了一個使用DebuggerTypeProxy直接指向國外議會。 – 2010-12-20 09:10:22

回答

19

實施例(System.Collections.Generic.KeyValuePair < TKEY的,TValue>中)添加以下的AssemblyInfo.cs:

using System.Collections.Generic; 
using System.Diagnostics; 

[assembly: DebuggerDisplay("[Key={Key}, Value={Value}]", Target = typeof(KeyValuePair<,>))] 

(測試在VS2015)

1

屬性是一種在編譯時修飾某些東西(類型,方法,字段等)的方法,它們存儲在程序集的二進制表示中。在其中添加新屬性的一種方法是使用新屬性重新編譯代碼。如果您沒有代碼,在某些情況下,您可能會通過反彙編代碼來獲取代碼。

另一種方式我能想到的,可能是使用反射在裝配加載和處理所有類型,然後生成(通過反射)添加到您想要的類型(這裏的an example

21
與DebuggerDisplay另一個組件

是的。事實上,微軟非常高興在Visual Studio中將其作爲內置選項。

查找「我的文檔\ Visual Studio 20XX \ autoexp.cs」以瞭解如何將DebuggerDisplay屬性應用於程序集外部類型的示例。然後,添加一些自己的,重新編譯它並替換autoexp.dll,然後重新啓動Visual Studio。它應該只是工作。

僅供參考,請參閱this MSDN article


或者黃色的「注意事項」的段落:我是purchasable extension to Visual Studio,使少了很多大驚小怪這樣做的創造者,甚至無需擁有停止調試會話。設置DebuggerDisplay爲外國類型的

+0

不錯的答案 - 我試過autoexp解決方案 - 我想更改調試器顯示的第三方代碼在實體框架內部。由於我沒有包含autoexp,因此編譯失敗。如果可以/我應該在編譯時加入其他第三方庫,是否有任何提示? – user3141326 2016-03-12 14:21:12

+0

我發現它可以在這裏看到完整的說明:http://www.tech-archive.net/Archive/VisualStudio/microsoft.public.vsnet.debugging/2006-08/msg00038.html它的工作原理沒有任何問題。無需重新啓動Visual Studio。編譯autoexp.dll之後僅僅擊中F5就足夠了。謝謝你的偉大答案。 – user3141326 2016-03-12 14:39:02

+0

在VS2015中仍然有可能,但autoexp.cs不存在請參閱:https://stackoverflow.com/questions/33394892/modifying-external-debuggerdisplay-with-autoexp-cs-in-visual-studio-2015 – IvanH 2018-02-19 14:38:56

相關問題