最近了解到DebuggerDisplay屬性後,我發現它非常有用。然而,令我驚訝的一件事是它沒有附加[ConditionalAttribute("DEBUG")]
屬性。有沒有辦法強制這個或者嘗試一個壞主意?還是因爲其他原因無關緊要?調試屬性如[DebuggerDisplay]是否仍然編譯爲發佈二進制文件?
回答
[ConditionalAttribute(「DEBUG」)]僅用於優化out方法調用。
如果你真的想從你的版本中刪除這些,你可以使用#ifdef,以便代碼只在發佈模式下編譯。
要記住的一件事是,你仍然可以在發佈模式下調試二進制文件,只要你有pdb文件它應該不重要。發佈模式只是更快地清理變量並應用一些編譯器優化
我認爲這將是一個壞主意,因爲很多時候你附加屬性的東西除了在調試器IMO中顯示它之外還有其他一些用途。
我想你可能誤解了。我想編譯出屬性,而不是類。 – MighMoS 2009-07-08 18:37:26
因爲我經常需要在Release配置版本中調試沒有DEBUG
指令的東西,所以我不想讓這些提示去除調試器。但是,如果您在調試過程中顯示某些東西時顯示某些專有或機密信息,而您不想將其加入到發佈版本中,則可能需要考慮使用ConditionalAttribute
或#if/#elif/#endif
預處理器指令來控制發佈到您的發佈版本中的內容。
例如,你可以這樣做:
#if DEBUG
[DebuggerDisplay...]
#endif
public class MyAwesomeClass
{
}
這將確保被賦予了DEBUG指令時的屬性只發出。
我會分享一個我使用partial
來欣賞的模式。
public partial class MyClass{
//class details here
}
然後在別處:
#if DEBUG
[DebuggerDisplay("DebuggerValue")]
public partial class MyClass{
//anything needed for debugging purporses
}
#endif
這給使用DebuggerDisplay或其他屬性而不會干擾行動的基類的能力。
我一直在使用幾個文件,全部包裝在#if DEBUG
中以保存這些調試部分。它有助於保持核心類更清晰,並且我不必記住爲每個屬性開始/結束編譯器指令。
- 1. 調試/發佈配置影響編譯後的二進制
- 2. 是否將C#代碼編譯爲本機二進制文件?
- 3. 編譯二進制文件
- 4. 在SBT本地發佈預編譯X二進制文件
- 5. 如何編譯二進制文件?
- 6. 在VC++中調試發佈模式二進制文件
- 7. Gradle發佈版本仍然可調試?
- 8. 檢查是否編譯了「-static」的二進制文件
- 9. 將特定測試編譯爲二進制文件
- 10. 程序是否仍然編譯錯誤?
- 11. web.config文件中編譯調試屬性的影響是什麼?
- 12. pip編譯vs二進制文件
- 13. 使用VexCL「編譯二進制文件」
- 14. 反編譯非PC二進制文件
- 15. 屬性是intellisense,但仍然不能編譯
- 16. .fsx文件是否在調試或發佈模式下交互式編譯?
- 17. 是否有工具可以將CIL編譯爲二進制文件?
- 18. Python編碼的字符串仍然是二進制格式
- 19. 將XML文件編譯爲二進制文件
- 20. fpm:發佈打包二進制文件
- 21. 有條件的調試 - 它仍然編譯成RELEASE代碼嗎?
- 22. 如何將GCC編譯爲靜態二進制文件?
- 23. 如何檢查哪個#define被編譯爲二進制文件?
- 24. 是否可以編輯和重新編譯iOS二進制文件?
- 25. 測試已編譯的二進制文件的功能
- 26. GCC編譯的二進制文件給予 「不能執行二進制文件」
- 27. g ++編譯的二進制文件給「不能執行二進制文件」
- 28. eclipse:無需二進制文件調試
- 29. 在Amazon MapReduce上調用已編譯的二進制文件
- 30. gdb:使用-g編譯的二進制文件與使用-g編譯的二進制編譯的代碼
走得更遠會有辦法找出這些信息是否保存在這些.pdb文件中?如果發佈「二進制」沒有他們,它會沒事的。 – MighMoS 2009-07-08 18:38:56