调用Debugger.Break()之前和之后的C#事件?

时间:2011-11-10 23:38:08

标签: c# debugging events break breakpoints

我正在调试一个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之前和之后触发的一组事件,以检测进入和离开断点的时间。有没有办法做到这一点?

2 个答案:

答案 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