From 40aa9e9a8bb424aff5602b70aa80114b55a6f99f Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 5 Apr 2025 12:01:53 -0400 Subject: [PATCH] Unknown memory breakpoint crash fix --- IDEHelper/WinDebugger.cpp | 40 +++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/IDEHelper/WinDebugger.cpp b/IDEHelper/WinDebugger.cpp index e95f6a96..8348f2c9 100644 --- a/IDEHelper/WinDebugger.cpp +++ b/IDEHelper/WinDebugger.cpp @@ -2660,25 +2660,33 @@ bool WinDebugger::DoUpdate() } } - BF_ASSERT(foundBreakpoint != NULL); - - DbgSubprogram* subprogram = mDebugTarget->FindSubProgram(pcAddress); - if (CheckConditionalBreakpoint(foundBreakpoint, subprogram, pcAddress)) + if (foundBreakpoint == NULL) { - if (foundBreakpoint != NULL) - { - mDebugManager->mOutMessages.push_back(StrFormat("memoryBreak %s", EncodeDataPtr(foundBreakpoint->mMemoryBreakpointInfo->mMemoryAddress, false).c_str())); - mRunState = RunState_Paused; - } - - mActiveBreakpoint = foundBreakpoint; - mBreakStackFrameIdx = -1; - RemoveTempBreakpoints(); - BfLogDbg("Memory breakpoint hit: %p\n", foundBreakpoint); + BfLogDbg("Unknown memory breakpoint hit %p\n", pcAddress); + mDebugManager->mOutMessages.push_back(StrFormat("memoryBreak %s", EncodeDataPtr(pcAddress, false).c_str())); + mRunState = RunState_Paused; + break; } else - ClearCallStack(); - break; + { + DbgSubprogram* subprogram = mDebugTarget->FindSubProgram(pcAddress); + if (CheckConditionalBreakpoint(foundBreakpoint, subprogram, pcAddress)) + { + if (foundBreakpoint != NULL) + { + mDebugManager->mOutMessages.push_back(StrFormat("memoryBreak %s", EncodeDataPtr(foundBreakpoint->mMemoryBreakpointInfo->mMemoryAddress, false).c_str())); + mRunState = RunState_Paused; + } + + mActiveBreakpoint = foundBreakpoint; + mBreakStackFrameIdx = -1; + RemoveTempBreakpoints(); + BfLogDbg("Memory breakpoint hit: %p\n", foundBreakpoint); + } + else + ClearCallStack(); + break; + } } if ((mRunState == RunState_DebugEval) && (mDebugEvalThreadInfo.mThreadId == mDebuggerWaitingThread->mThreadId))