Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重复单步调试≠;运行调试_C#_Visual Studio 2010_Debugging_Xna - Fatal编程技术网

C# 重复单步调试≠;运行调试

C# 重复单步调试≠;运行调试,c#,visual-studio-2010,debugging,xna,C#,Visual Studio 2010,Debugging,Xna,我正在Visual Studio 2010 Ultimate中使用C#with XNA 我有一个程序,它执行一些计算,不涉及计时、线程或其他任何可能影响结果的计算,如果我停止执行以进行调试,那么在继续运行程序的其余部分之前,它不会执行任何操作 在结束时,程序将一些输出打印到屏幕上 在该程序中,反复按F10直到显示输出时产生的结果与仅按F5在调试时运行或不进行调试时运行产生的结果不同,两者都产生错误的结果 这显示了使用单个F10步骤的运行 该程序多次运行一个简单的两人游戏,游戏包括在棋盘上移动一

我正在Visual Studio 2010 Ultimate中使用C#with XNA

我有一个程序,它执行一些计算,不涉及计时、线程或其他任何可能影响结果的计算,如果我停止执行以进行调试,那么在继续运行程序的其余部分之前,它不会执行任何操作

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

在该程序中,反复按
F10
直到显示输出时产生的结果与仅按
F5
在调试时运行或不进行调试时运行产生的结果不同,两者都产生错误的结果

这显示了使用单个
F10
步骤的运行

该程序多次运行一个简单的两人游戏,游戏包括在棋盘上移动一个计数器,两个玩家都是自动的,并且随机移动。每行100场比赛,有些比赛在一定数量的围棋结束之前不会结束,并且不计算在内。从这8组随机游戏中可以看出,这是相当平衡的,至少对于随机采取行动的玩家来说,谁赢谁输是这样的

下图显示了使用
F5
运行的情况

有些事情不在这里,比赛的运行不会相互影响,而设置只是一个停止和开始计数的地方,它们不会影响任何事情。然而,与第一张图片中的情况非常不同,我们连续赢了100场比赛,两次,但在两盘之后又连续输了100场全新的无关比赛

第二幅图给出的明显答案是,我的程序逻辑有问题,但是没有。令人沮丧的是,当我去调试问题时,缓慢地运行调试器,这样我就可以看到发生了什么,从而修复了它


有什么问题吗?

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


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

事实上,你说玩家随机移动意味着你可能会被将
new random()
放入循环中的常见错误所捕获。使你的随机对象保持静止或将其移出循环,你的问题就会消失。

TYVM Reed Copsey和Scott Chamberlain:,)在每个“random rand=new random();”之间都有一个很长的循环,涉及大量使用“rand”,但似乎不够长。我现在只声明了一次,程序运行正常。