2016-01-02 29 views
2

#if DEBUG當程序在發佈後被調試時(例如通過類似OllyDBG的調試工具)被執行還是已經被髮布版本上的編譯器加載了?#if當外部調試器連接時,DEBUG會執行嗎?

意味着我用#if做了什麼#if在發佈版本上創建該程序後,DEBUG是否可見?

+0

參見該標準發佈版本的設置沒有定義DEBUG:TRACE – peterG

回答

0

據我的理解,#if DEBUG等編譯器指令在編譯時根據設置的符號進行解析。實際上這意味着構建配置被考慮在內。如果在編譯期間沒有設置DEBUG,稍後連接調試器不能使魔術中已移除的實現部分重新出現;在編譯過程中相應的部分確實是'nuks'。

0

這是一個預處理器指令,所以#if中的代碼僅在存在DEBUG符號時才被編譯。

因此,你將無法進行調試,這不是編中間語言代碼的部分代碼...

1

#if DEBUG編譯過程中被處理。如果DEBUG符號沒有定義,那麼裏面的代碼不會被編譯,所以它不能在發佈版本中執行。

MSDN

當C#編譯器遇到#if指令,最終跟一個#endif指令,它將編譯指令僅當指定的符號被定義之間的代碼。

0

#if DEBUG與調試無關,只是簡單地包含或排除構建/程序集中的部分源代碼。

所以#if DEBUG內的任何代碼將不會是一個發行版的一部分建立

相關問題