重复单步调试≠运行调试

ala*_*ere 2 c# debugging xna visual-studio-2010

我在Visual Studio 2010 Ultimate中使用C#和XNA.

我有一个程序执行一些计算,不涉及计时,线程或任何可能影响结果的事情,如果我停止执行调试,但在继续运行程序的其余部分之前没有做任何事情.

最后,程序将一些输出打印到屏幕上.

在这个程序中反复按F10直到显示输出产生的结果与F5在调试时运行或在没有调试的情况下运行时产生的结果不同,这两者都产生错误的结果.

脚步

这显示了具有单个F10步骤的运行.

该程序多次运行一个简单的双人游戏,游戏涉及在棋盘上移动计数器,两个玩家都是自动化的并随机移动.每行发生100场比赛,有些比赛在一定数量的比赛结束之前没有结束且不计算在内.从这8组随机游戏中可以看出,它非常平衡,至少对于那些随意采取行动的玩家来说,谁将获胜以及谁将会失败.

下图显示了运行F5.

跑

有些事情不在这里,游戏运行不会相互影响,而且只是一个停止和开始计数的地方,它们不起作用.然而,与第一张图片非常不同的是,我们连续赢得了所有100场比赛,两次,但后来又连续两场失去了100个全新的无关游戏.

给出第二张图像的明显答案是我的程序逻辑有问题,但是没有.令人沮丧的是,当我慢慢地调试运行调试器的问题时,我可以看到发生了什么修复它.

可能有什么不对?

Ree*_*sey 6

如果这不是使用线程,那么我的主要怀疑是有些东西可能正在使用System.Random该类.确保为每次调用使用相同的Random类实例Next().

可能的问题是,如果你Random快速连续地调用一个方法(即:正常运行,而不是在调试器中),并且每次都创建一个新实例,你很可能会使用相同的种子播种随机实例因为它基于系统时钟.通过调试"减慢"可以防止这种情况发生,这就是在步进调试会话期间行为会更好的原因.