Em1*_*Em1 1 debugging visual-studio
我不确定如何真正地将我的问题写成文字,所以让我试着用一个例子来解释它:
假设我的程序在特定操作中遇到了一些奇怪的行为.我已经找到了一些导致这种奇怪行为的代码.禁用此序列时,我不会遇到此行为.不幸的是,我需要这个代码,因为其他东西不起作用.
所以,我接下来要做的是弄清楚当代码摘录处于活动状态时出现异常的原因.
为了更好地理解正在发生的事情,我有时想要运行整个动作,包括"坏代码",有时候没有.然后我可以比较结果,例如UI中发生的事情或我的函数返回的内容.
我想到的第一种方法是在启用代码的情况下运行我的程序,执行我想做的任何事情,然后停止我的程序,注释掉代码,重新编译并再次运行.嗯......听起来很蠢.特别是如果我再次需要打开该代码以查看另一个时间的其他行为,然后再次关闭,打开和关闭等等.
我不能选择使用断点并影响语句顺序或修改值,以便我运行或不运行if-statements,for-loops等.两个例子:
Visual Studio 2012中是否有任何技术允许我将此代码标记为可选,我可以在执行操作之前决定是否要运行此代码序列?我想到if(true|false)了更高层次的事情.
我不是在寻找一个我需要多次重新运行程序的解决方案.在那种情况下,我仍然可以使用简单的方法来简单地注释掉代码#if false.
1请注意,当我需要在特定位置查看特定变量时(如果我没有将值写入输出中),我可能会设置断点,但会再次关闭断点以在一个中运行整个操作走.
在Visual Studio调试器中,您可以在"相关代码"前面设置断点.当代码在该点停止时,您可以选择让它继续,或者您可以右键单击任何其他行并选择Set Next Statement.
这是一种奇怪的选择,但我开始欣赏它.
我想到了更高层次上的if(true | false).
为什么"在更高的层次上"?为什么不使用这个呢?
您希望有时执行一段代码,有时不需要,并且应该在运行时更改开关,而不是在编译时更改 - 这显然会导致
if(condition)
{
// code in stake
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是condition您将使用什么类型- 可能是您true在代码的发行版本中设置的变量,false有时在您的调试版本中.也许值来自配置文件,可能来自环境变量,可能由程序中的某种逻辑计算,无论何时何地.
编辑:您还可以在代码中引入一个布尔变量,默认情况下将其condition初始化为true默认值,并随时使用调试器更改其值.
我能想到的唯一选择是在UI中添加只在调试时出现的内容,让您可以选择包含/排除相关操作.
在您使用它时,您可能希望启用从UI重置应用程序到"已知状态".
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |