我有一个程序,它是一个类似俄罗斯方块的小游戏。我的碰撞检测器在某些配置中有问题,我想对其进行调试,但游戏并未以“有问题”状态启动,我想让游戏进入该状态并且只有他们开始调试。由于碰撞检测器运行非常频繁,我不能在我知道只有在我达到问题状态后才会运行的地方设置断点,并且调试过程从游戏窗口获得焦点,并且不允许我给出用键盘输入。
使用 Visual Studio 2012,有没有办法只在一段时间后启动调试器,在启动时它会忽略断点,只有在我告诉它之后,它才会在断点处开始中断?
我有一个程序,它是一个类似俄罗斯方块的小游戏。我的碰撞检测器在某些配置中有问题,我想对其进行调试,但游戏并未以“有问题”状态启动,我想让游戏进入该状态并且只有他们开始调试。由于碰撞检测器运行非常频繁,我不能在我知道只有在我达到问题状态后才会运行的地方设置断点,并且调试过程从游戏窗口获得焦点,并且不允许我给出用键盘输入。
使用 Visual Studio 2012,有没有办法只在一段时间后启动调试器,在启动时它会忽略断点,只有在我告诉它之后,它才会在断点处开始中断?
是的,您可以通过在不调试的情况下开始执行此操作,然后当您到达所需的状态时,使用“调试”菜单,选择“附加到进程”。当您看到列表时,双击您的应用程序。
另一种可能的解决方案是禁用断点,然后当您到达您想要的状态(您将开始调试的状态)时,只需使用断点窗口启用您想要的断点。
当您看到游戏将进入有问题的配置时,您可以添加按钮或快捷方式并手动触发调试器中断:
System.Diagnostics.Debugger.Break();
从那里在碰撞检测过程中放置另一个断点。
Some variant of conditional breakpoint should work for you. The hard part is deciding when you want to break in, but conditional BPs give you a flexible framework to work within.
//assume that frame_counter is incremented at 60 Hz
//adjust this conditional to whatever you want to trigger the breakpoint for real
if(frame_counter > 60 * 60 * 5) { //wait 5 minutes
} // place breakpoint here
调整以适应您的需求