#if DEBUG
當程序在發佈後被調試時(例如通過類似OllyDBG的調試工具)被執行還是已經被髮布版本上的編譯器加載了?#if當外部調試器連接時,DEBUG會執行嗎?
意味着我用#if做了什麼#if在發佈版本上創建該程序後,DEBUG是否可見?
#if DEBUG
當程序在發佈後被調試時(例如通過類似OllyDBG的調試工具)被執行還是已經被髮布版本上的編譯器加載了?#if當外部調試器連接時,DEBUG會執行嗎?
意味着我用#if做了什麼#if在發佈版本上創建該程序後,DEBUG是否可見?
據我的理解,#if DEBUG
等編譯器指令在編譯時根據設置的符號進行解析。實際上這意味着構建配置被考慮在內。如果在編譯期間沒有設置DEBUG
,稍後連接調試器不能使魔術中已移除的實現部分重新出現;在編譯過程中相應的部分確實是'nuks'。
這是一個預處理器指令,所以#if
中的代碼僅在存在DEBUG
符號時才被編譯。
因此,你將無法進行調試,這不是編中間語言代碼的部分代碼...
#if DEBUG
編譯過程中被處理。如果DEBUG
符號沒有定義,那麼裏面的代碼不會被編譯,所以它不能在發佈版本中執行。
從MSDN:
當C#編譯器遇到#if指令,最終跟一個#endif指令,它將編譯指令僅當指定的符號被定義之間的代碼。
#if DEBUG
與調試無關,只是簡單地包含或排除構建/程序集中的部分源代碼。
所以#if DEBUG
內的任何代碼將不會是一個發行版的一部分建立
參見該標準發佈版本的設置沒有定義DEBUG:TRACE – peterG