Browse Source

Token of last function verified on pause (Forum-7593)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1397 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
d26dbe7a59
  1. 15
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

15
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

@ -250,6 +250,7 @@ namespace Debugger @@ -250,6 +250,7 @@ namespace Debugger
}
// NOTE: During evlulation some chains may be temporaly removed
// NOTE: When two events are invoked, step outs ocurr at once when all is done
internal void CheckExpirationOfFunctions()
{
if (debugger.Evaluating) return;
@ -260,6 +261,8 @@ namespace Debugger @@ -260,6 +261,8 @@ namespace Debugger
ICorDebugFrameEnum corFrameEnum = corChainEnum.Next().EnumerateFrames();
uint maxFrameIndex = corFrameEnum.Count - 1;
ICorDebugFrame lastFrame = corFrameEnum.Next();
List<Function> expiredFunctions = new List<Function>();
foreach(KeyValuePair<uint, Chain> chain in chainCache) {
@ -270,6 +273,18 @@ namespace Debugger @@ -270,6 +273,18 @@ namespace Debugger
}
}
// Check the token of the last function
// TODO: Investigate: this should not happen (test case: event with two handlers)
if (lastFrame != null &&
chainCache.ContainsKey(maxChainIndex) &&
chainCache[maxChainIndex].Frames.ContainsKey(maxFrameIndex)) {
Function cachedFunction = chainCache[maxChainIndex].Frames[maxFrameIndex];
if (cachedFunction.Token != lastFrame.FunctionToken) {
expiredFunctions.Add(cachedFunction);
}
}
foreach(Function f in expiredFunctions) {
f.OnExpired(EventArgs.Empty);
}

Loading…
Cancel
Save