Я отлаживаю AI-бота, который получает 'replay' входные данные, чтобы он воспроизводил ранее сыгранный матч. Каждый ход ограничен определенным количеством времени, которое бот использует, чтобы вычислить оставшееся время для текущего хода; это позволяет определить, как использовать оставшееся время поворота. Теперь, что я хотел бы сделать, это отслеживать количество времени, затраченного на отладку (общее время, потраченное в точках останова для этого хода), так что я могу добавить это к оставшемуся времени, чтобы казалось, что выполнение никогда не приостанавливается .
Первоначально я пытался использовать что-то вроде этого:
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
, чтобы определить время для входа и выхода из точек останова. Есть ли способ сделать это?