Browse Source

Unknown memory breakpoint crash fix

Brian Fiete 5 months ago
parent
commit
40aa9e9a8b
1 changed files with 23 additions and 15 deletions
  1. 23 15
      IDEHelper/WinDebugger.cpp

+ 23 - 15
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)
+						{
+							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
 						{
 						{
-							if (foundBreakpoint != NULL)
+							DbgSubprogram* subprogram = mDebugTarget->FindSubProgram(pcAddress);
+							if (CheckConditionalBreakpoint(foundBreakpoint, subprogram, pcAddress))
 							{
 							{
-								mDebugManager->mOutMessages.push_back(StrFormat("memoryBreak %s", EncodeDataPtr(foundBreakpoint->mMemoryBreakpointInfo->mMemoryAddress, false).c_str()));
-								mRunState = RunState_Paused;
-							}
+								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);
+								mActiveBreakpoint = foundBreakpoint;
+								mBreakStackFrameIdx = -1;
+								RemoveTempBreakpoints();
+								BfLogDbg("Memory breakpoint hit: %p\n", foundBreakpoint);
+							}
+							else
+								ClearCallStack();
+							break;
 						}
 						}
-						else
-							ClearCallStack();
-						break;
 					}
 					}
 
 
 					if ((mRunState == RunState_DebugEval) && (mDebugEvalThreadInfo.mThreadId == mDebuggerWaitingThread->mThreadId))
 					if ((mRunState == RunState_DebugEval) && (mDebugEvalThreadInfo.mThreadId == mDebuggerWaitingThread->mThreadId))