diff --git a/IDEHelper/WinDebugger.cpp b/IDEHelper/WinDebugger.cpp index 9372e78f..1d479f0b 100644 --- a/IDEHelper/WinDebugger.cpp +++ b/IDEHelper/WinDebugger.cpp @@ -531,6 +531,7 @@ WinDebugger::WinDebugger(DebugManager* debugManager) : mDbgSymSrv(this) { mFreeMemoryBreakIndices.push_back(i); } + mMemoryBreakpointVersion = 0; SYSTEM_INFO systemInfo; GetSystemInfo(&systemInfo); @@ -621,6 +622,9 @@ void WinDebugger::ThreadRestoreUnpause() void WinDebugger::UpdateThreadDebugRegisters(WdThreadInfo* threadInfo) { + if (threadInfo->mMemoryBreakpointVersion == mMemoryBreakpointVersion) + return; + auto threadId = threadInfo->mHThread; BF_CONTEXT lcContext; @@ -655,6 +659,7 @@ void WinDebugger::UpdateThreadDebugRegisters(WdThreadInfo* threadInfo) } bool worked = BF_SetThreadContext(threadId, &lcContext) != 0; BF_ASSERT(worked || (mRunState == RunState_Terminating) || (mRunState == RunState_Terminated)); + threadInfo->mMemoryBreakpointVersion = mMemoryBreakpointVersion; } void WinDebugger::UpdateThreadDebugRegisters() @@ -3338,6 +3343,7 @@ void WinDebugger::CheckBreakpoint(WdBreakpoint* wdBreakpoint) mMemoryBreakpoints[memoryBreakIdx].mByteCount = wantBytes[i]; mMemoryBreakpoints[memoryBreakIdx].mOfs = curOfs; curOfs += wantBytes[i]; + mMemoryBreakpointVersion++; wdBreakpoint->mMemoryBreakpointInfo->mMemoryWatchSlotBitmap |= 1< mPhysBreakpointAddrMap; // To make sure we don't create multiple physical breakpoints at the same addr Array mBreakpoints; Dictionary mBreakpointAddrMap;