我正在调试一个AI机器人,它正在被输入'重播'输入数据,以便重播之前播放的匹配。每回合被限制在一定的时间内,机器人用它来计算当前转弯的剩余时间;这让它可以确定如何使用剩余的转弯时间。现在,我想做的是跟踪调试所花费的时间(在该回合中花费在断点上的总时间),所以我可以将其添加到剩余时间以使其看起来像执行从未暂停
最初,我尝试使用这样的东西:
private DateTime turnTimeStarted;
public TimeSpan TurnTimeRemaining
{
get { return (turnTimeStarted + TurnTime + TimeSpentInDebugger) -
DateTime.Now; }
}
private DateTime debugStartTime;
private bool inDebugger = false;
private TimeSpan timeSpentInDebugger = new TimeSpan();
public TimeSpan TimeSpentInDebugger
{
get
{
if (!inDebugger)
return timeSpentInDebugger;
return timeSpentInDebugger + (DateTime.Now - debugStartTime);
}
}
public void Break()
{
if (Debugger.IsAttached)
{
debugStartTime = DateTime.Now;
inDebugger = true;
Debugger.Break();
inDebugger = false;
timeSpentInDebugger += DateTime.Now - debugStartTime;
}
}
这个问题是它打破了实际的Debugger.Break()
语句而不是Break()
方法调用,所以我最终在我想要调试的代码的上下文之外。
我正在寻找的是在调用Debugger.Break
之前和之后触发的一组事件,以检测进入和离开断点的时间。有没有办法做到这一点?
答案 0 :(得分:0)
使用秒表(http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx)课程,在开始之前开始,在此之后停止并根据需要添加时间。
答案 1 :(得分:0)
我建议看看SlimTune:http://code.google.com/p/slimtune/和关于DNProfiler的这篇文章由Matt Pietrek http://msdn.microsoft.com/en-us/magazine/cc301725.aspx