#如果DEBUG在附加外部调试器时执行

本文关键字:外部 调试器 执行 如果 DEBUG | 更新日期: 2023-09-27 18:28:47

#if DEBUG是在程序发布后调试时执行的(例如通过OllyDBG等调试器工具),还是在发布版本时编译器已经对其进行了核处理?

意味着无论我用#做什么,如果在发布版本上创建程序后,DEBUG是可见的?

#如果DEBUG在附加外部调试器时执行

#if DEBUG在编译期间进行处理。如果未定义DEBUG符号,则不会编译内部代码,因此无法在发布版本中执行。

来自MSDN:

当C#编译器遇到一个#if指令,后面跟着一个#endif指令时,只有定义了指定的符号,它才会在指令之间编译代码。

据我所知,像#if DEBUG这样的编译器指令是在编译时解析的,具体取决于设置的符号。在实践中,这意味着要考虑构建配置。如果在构建过程中没有设置DEBUG,那么稍后附加调试器将无法使实现中被删除的部分神奇地重新出现;在编译过程中,相应的部分确实被"核武器化"了。

它是一个预处理器指令,因此只有当DEBUG符号存在时,才会编译#if中的代码。

因此,您将无法调试不属于已编译中间语言代码的代码。。。

#if DEBUG与调试无关,只是在构建/程序集中包含或排除部分源代码。

标准的Release Build设置没有定义DEBUG,因此#if DEBUG中的任何代码都不会成为Release Build 的一部分