在Visual Studio 2012中进行调试时,我可以将某些代码标记为可选吗?

Em1*_*Em1 1 debugging visual-studio

我不确定如何真正地将我的问题写成文字,所以让我试着用一个例子来解释它:

假设我的程序在特定操作中遇到了一些奇怪的行为.我已经找到了一些导致这种奇怪行为的代码.禁用此序列时,我不会遇到此行为.不幸的是,我需要这个代码,因为其他东西不起作用.

所以,我接下来要做的是弄清楚当代码摘录处于活动状态时出现异常的原因.

为了更好地理解正在发生的事情,我有时想要运行整个动作,包括"坏代码",有时候没有.然后我可以比较结果,例如UI中发生的事情或我的函数返回的内容.

我想到的第一种方法是在启用代码的情况下运行我的程序,执行我想做的任何事情,然后停止我的程序,注释掉代码,重新编译并再次运行.嗯......听起来很蠢.特别是如果我再次需要打开该代码以查看另一个时间的其他行为,然后再次关闭,打开和关闭等等.

我不能选择使用断点并影响语句顺序或修改值,以便我运行或不运行if-statements,for-loops等.两个例子:

  • 我调试时序关键行为,当我停止程序时,时序显着变化.因此,我可以设置的第一个断点必须位于操作的末尾.1
  • 我希望出现一个工具提示或其他窗口,当焦点被赋予VS时,它会被"抑制".因此,我根本不能使用任何断点.无论是在行动的开头还是在行动的最后.1

Visual Studio 2012中是否有任何技术允许我将此代码标记为可选,我可以在执行操作之前决定是否要运行此代码序列?我想到if(true|false)了更高层次的事情.


我不是在寻找一个我需要多次重新运行程序的解决方案.在那种情况下,我仍然可以使用简单的方法来简单地注释掉代码#if false.


1请注意,当我需要在特定位置查看特定变量时(如果我没有将值写入输出中),我可能会设置断点,但会再次关闭断点以在一个中运行整个操作走.

Dan*_*man 5

在Visual Studio调试器中,您可以在"相关代码"前面设置断点.当代码在该点停止时,您可以选择让它继续,或者您可以右键单击任何其他行并选择Set Next Statement.

这是一种奇怪的选择,但我开始欣赏它.

  • 比我想承认的更频繁地派上用场. (3认同)

Doc*_*own 5

我想到了更高层次上的if(true | false).

为什么"在更高的层次上"?为什么不使用这个呢?

您希望有时执行一段代码,有时不需要,并且应该在运行时更改开关,而不是在编译时更改 - 这显然会导致

if(condition)
{
    // code in stake
} 
Run Code Online (Sandbox Code Playgroud)

这里的问题是condition您将使用什么类型- 可能是您true在代码的发行版本中设置的变量,false有时在您的调试版本中.也许值来自配置文件,可能来自环境变量,可能由程序中的某种逻辑计算,无论何时何地.

编辑:您还可以在代码中引入一个布尔变量,默认情况下将其condition初始化为true默认值,并随时使用调试器更改其值.

  • @ Em1:你错过了我只给你一些例子的例子,告诉你你可以在这里实现你想要的任何条件.在启动调试器之前,您没有真正解释"现在"的含义?启动调试器后?在节之前的断点?假设你的意思是"在启动调试器之后",你可以在这里引入一个布尔变量,并在输入所涉及的代码段之前使用调试器在true或false之间更改其内容. (2认同)

Mic*_*own 5

我能想到的唯一选择是在UI中添加只在调试时出现的内容,让您可以选择包含/排除相关操作.

在您使用它时,您可能希望启用从UI重置应用程序到"已知状态".

  • 虽然不满意(对于一个实际的小问题,过度的解决方法),到目前为止**唯一可行的解​​决方案**.+1为此. (2认同)