在visual studio中使用#if (DEBUG)
和System.Diagnostics.Debugger.IsAttached
有何不同?是否设置了DEBUG
标志但没有附加调试器的情况,或者在未设置DEBUG
标志时可以附加调试器的情况?
答案 0 :(得分:38)
#if DEBUG
确保代码在发布版本中根本不包含在程序集中。此外,#if DEBUG
包含的代码一直在调试版本中运行 - 而不仅仅是在调试器下运行时。
Debugger.IsAttached
表示无论是调试还是发布版本都包含代码。并且可以附加调试器以将版本发布到。
将两者结合使用是很常见的。 #if DEBUG
通常用于记录日志,或减少内部测试版本中的异常处理。 Debugger.IsAttached
倾向于仅用于决定是否吞下异常或向程序员展示它们 - 更多的是程序员的帮助而不是其他任何东西。
答案 1 :(得分:11)
#if DEBUG
是一个编译时检查,这意味着如果定义了DEBUG
预处理程序符号,它所包含的代码将仅包含在输出程序集中。 Debugger.IsAttached
是运行时检查,因此调试代码仍然包含在程序集中,但只有在调试程序附加到进程时才会执行。
答案 2 :(得分:5)
#if (DEBUG)
是一个预处理程序指令,允许您有条件地编译代码。
System.Diagnostics.Debugger.IsAttached
提供一个运行时值,指示调试器是否附加到进程。
答案 3 :(得分:2)
它没有任何共同之处。您可以调试Release版本。您可以在没有调试器的情况下运行Debug构建,按Ctrl + F5。
答案 4 :(得分:0)
条件属性是上面列出的属性的另一个相关选项。关于这个问题,这个问题的答案很好。
答案 5 :(得分:0)
private void ConfigureOAuthTokenConsumption(IAppBuilder app)
{
#if DEBUG
AuthenticateViaAppOwnIdentity(app);
#else
AuthenticateViaAzureAD(app);
#endif
}
使用此代码,只需尝试将构建从调试更改为发布,反之亦然。运行/排除的代码将在VS中自动显示为黑色和灰色变化