首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#如果调试和调试生成?

#如果调试和调试生成?
EN

Stack Overflow用户
提问于 2018-09-24 21:11:13
回答 2查看 147关注 0票数 0

如果在Visual中调试,下面的代码将打印字符串。

代码语言:javascript
复制
#if DEBUG
Console.WriteLine("...In visual studio...");
#endif

如果在...\bin\Debug的指导下运行编译的exe文件,它会打印字符串吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-24 21:27:26

所有#...指令都由编译器处理。它们是,而不是最终.exe文件中的。它们是,而不是运行时执行的

这意味着,在这种情况下,最重要的是,编译时的状况是什么。如果将.exe构建为调试生成,则定义了DEBUG常量,因此.exe文件将包含Console.WriteLine("...In visual studio...");行的代码。当您运行此.exe文件时,无论何时、何地或如何,它都会将该行输出到控制台。

另一方面,如果将应用程序构建为发行版构建,则不会定义DEBUG常量,编译器也不会将行添加到.exe文件中。无论您做什么,您都不会让.exe文件打印您的行。如果使用反编译器查看.exe文件,您甚至不会在其中找到字符串"...In visual studio..."。这就好像你一开始就没有写过这一行。

票数 3
EN

Stack Overflow用户

发布于 2018-09-24 21:17:45

在哪里运行应用程序并不重要,重要的是如何构建应用程序。当您选择调试构建时,编译器声明DEBUG常量,当您运行exe时,将执行if分支,因为该常量是声明的。

在Visual中,您可以通过将Build选项卡置于Project Properties下来查看声明的常量,如果在此期间尝试将构建模式更改为Release,则可以看到“定义调试常量”将自动被选中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52487438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档