c# - 重复单步调试≠运行调试

标签 c# visual-studio-2010 debugging xna

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

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

程序结束时将一些输出打印到屏幕上。

在此程序中,重复按 F10 直到显示输出所产生的结果与仅按 F5 在调试时运行或在不调试的情况下运行产生的结果不同,这两者都会产生错误的结果。

steps

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

该程序多次运行一个简单的双人游戏,该游戏涉及在棋盘上移动一个计数器,两个玩家都是自动的并随机移动。每条线进行 100 场比赛,有些比赛在一定次数过期之前不会结束,因此不计算在内。从这 8 组随机游戏可以看出,它是相当平衡的,至少对于随机走棋的玩家来说,谁赢谁输。

下图显示了使用 F5 运行。

run

这里有些不对劲,游戏运行不会相互影响,而布景只是一个停止和开始计数的地方,它们不会影响任何东西。然而,与第一张图片非常不同的是,我们连续赢得了所有 100 场比赛,两次,但随后连续两盘输掉了 100 场全新的不相关比赛。

给出第二张图片的明显答案是我的程序逻辑有问题,但事实并非如此。令人沮丧的是,当我去调试问题时,运行调试器的速度很慢,这样我就可以看到发生了什么可以修复它。

有什么问题吗?

最佳答案

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

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

关于c# - 重复单步调试≠运行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8261386/

相关文章:

c# - VS2010性能分析: How can I identify Worker Threads?(CurrentThread.Name产生异常)

c++ - Visual Studio 2010 全局 VC++ 目录 Redux

javascript - 如何启动 jsconsole.com?

c# - 是否可以在 C# MSScriptControl.ScriptControlClass 执行的 JScript 中休眠?

c# - 将数据表传递给存储过程

c# - 如何告诉调试器忽略抛出的异常中断?

c# - Visual Studio 2010/2012 : when Stop Debugging on breakpoint hit debugged process hangs and is unkillable

python - pygtk 2.22和python 2.6严重不稳定

c# - 了解树搜索中的 PLINQ 瓶颈

c# - 如何在 C# 中实现内存事务作用域?