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
} }
// NOTE: During evlulation some chains may be temporaly removed // 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() internal void CheckExpirationOfFunctions()
{ {
if (debugger.Evaluating) return; if (debugger.Evaluating) return;
@ -260,6 +261,8 @@ namespace Debugger
ICorDebugFrameEnum corFrameEnum = corChainEnum.Next().EnumerateFrames(); ICorDebugFrameEnum corFrameEnum = corChainEnum.Next().EnumerateFrames();
uint maxFrameIndex = corFrameEnum.Count - 1; uint maxFrameIndex = corFrameEnum.Count - 1;
ICorDebugFrame lastFrame = corFrameEnum.Next();
List<Function> expiredFunctions = new List<Function>(); List<Function> expiredFunctions = new List<Function>();
foreach(KeyValuePair<uint, Chain> chain in chainCache) { foreach(KeyValuePair<uint, Chain> chain in chainCache) {
@ -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) { foreach(Function f in expiredFunctions) {
f.OnExpired(EventArgs.Empty); f.OnExpired(EventArgs.Empty);
} }

Loading…
Cancel
Save