我正在运行一个C#控制台应用程序,例如以下内容:
int sum=0;
for (i=1;i<100000000;i++)
{
sum+=getSomeAlmostRandomValue();
// if (i%10000==0)
// Console.WriteLine(sum/i);
}
简单来说,我想检查大量迭代的结果的平均值。
在某些时候,我想检查到目前为止的平均值,看看它是怎么回事......但是每次在迭代中检查IF条件可能太愚蠢/耗时。 (这只是一个介绍我的问题的例子。我知道我可以将for循环分解为2个嵌套的for循环,以便不拥有IF。但是,我仍然可能不希望WriteLine每一次迭代)。所以我真正的问题如下:
是否有办法(通过删除2个评论行)暂停程序并检查我的变量值(i,sum)
答案 0 :(得分:5)
答案 1 :(得分:1)
只需使用条件断点并调试应用程序。例如,模数逻辑可用作断点条件:
i % 10000 == 0
每10,000次迭代将触及断点。
答案 2 :(得分:0)
对于可以断言正确值的单元测试看起来已经成熟,完全无需手动定期检查,但我无法帮助你,因为我不知道这是在尝试做什么。 子>
在这个特定的例子中,我将在IDE中使用条件断点。
但是,如果您想在代码中执行此操作,则可以使用System.Diagnostics.Debugger
类Break()
方法中断。
System.Diagnostics.Debug
课程中也有一些有用的方法,例如Assert
,Fail
,WriteLineIf
等。
它看起来像这样:
int sum=0;
for (i=1;i<100000000;i++)
{
sum+=getSomeAlmostRandomValue();
if (i%10000==0)
System.Diagnostics.Debugger.Break();
}
Debugger.Break
的问题在于它将编译为发布代码,而大多数(如果不是全部)Debug
类方法都以DEBUG
编译符号为条件。使用您自己的条件代码可以解决此问题:
#if DEBUG
Debugger.Break();
#endif
但是,一旦调试会话结束,我倾向于将此代码留在代码库中。也就是说,有时你会发现在一些麻烦的遗留代码周围留下一些调试基础设施可以在将来派上用场。
答案 3 :(得分:0)
谢谢大家的回答,
你让我检查调试选项,我找到了我需要的东西。
解决了我的问题是“全部中断”按钮。当我按下它时,程序暂停,我可以鼠标悬停在变量上并检查它们的值。
但我使用C#Express 2010并且工具栏上没有“Break All”。所以这就是我启用它的方式:
Tools -> Customize -> Commands -> Toolbar -> Debug -> Add Command -> Debug -> Break All
答案 4 :(得分:-1)
如果这是一个你不在开发环境中的应用程序,你应该研究生产者 - 消费者模式。有了它,您可以暂停应用程序,同时确保在显示之前完整生成数据。