1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Fixed skipped-conditional breakpoint callstack issue

This commit is contained in:
Brian Fiete 2019-12-05 06:48:47 -08:00
parent 18fa7e8a7b
commit fe92cc27aa

View file

@ -2222,6 +2222,7 @@ bool WinDebugger::DoUpdate()
breakpoint = (WdBreakpoint*)FindBreakpointAt((uintptr_t)exceptionRecord->ExceptionAddress); breakpoint = (WdBreakpoint*)FindBreakpointAt((uintptr_t)exceptionRecord->ExceptionAddress);
if ((breakpoint != NULL) && (!CheckConditionalBreakpoint(breakpoint, dwSubprogram, pcAddress))) if ((breakpoint != NULL) && (!CheckConditionalBreakpoint(breakpoint, dwSubprogram, pcAddress)))
{ {
ClearCallStack();
BfLogDbg("Skipping conditional breakpoint. Setting mIsAtBreakpointAddress = %p\n", breakpoint->mAddr); BfLogDbg("Skipping conditional breakpoint. Setting mIsAtBreakpointAddress = %p\n", breakpoint->mAddr);
threadInfo->mIsAtBreakpointAddress = breakpoint->mAddr; threadInfo->mIsAtBreakpointAddress = breakpoint->mAddr;
mRunState = RunState_Running; mRunState = RunState_Running;
@ -2334,6 +2335,8 @@ bool WinDebugger::DoUpdate()
RemoveTempBreakpoints(); RemoveTempBreakpoints();
BfLogDbg("Memory breakpoint hit: %p\n", foundBreakpoint); BfLogDbg("Memory breakpoint hit: %p\n", foundBreakpoint);
} }
else
ClearCallStack();
break; break;
} }
@ -3586,17 +3589,17 @@ bool WinDebugger::CheckConditionalBreakpoint(WdBreakpoint* breakpoint, DbgSubpro
return false; return false;
} }
auto _SplitExpr = [&](const StringImpl& expr, String& outExpr, String& outSubject) auto _SplitExpr = [&](const StringImpl& expr, StringImpl& outExpr, StringImpl& outSubject)
{ {
int crPos = expr.IndexOf('\n'); int crPos = expr.IndexOf('\n');
if (crPos != -1) if (crPos != -1)
{ {
outExpr = expr.Substring(0, crPos); outExpr += expr.Substring(0, crPos);
outSubject = expr.Substring(crPos + 1); outSubject += expr.Substring(crPos + 1);
} }
else else
{ {
outExpr = expr; outExpr += expr;
} }
}; };
@ -3616,8 +3619,13 @@ bool WinDebugger::CheckConditionalBreakpoint(WdBreakpoint* breakpoint, DbgSubpro
return false; return false;
} }
String expr; StringT<256> expr;
String subjectExpr; StringT<256> subjectExpr;
if (breakpoint->mMemoryBreakpointInfo != NULL)
{
subjectExpr += "*";
}
_SplitExpr(conditional->mExpr, expr, subjectExpr); _SplitExpr(conditional->mExpr, expr, subjectExpr);
DbgLanguage language = DbgLanguage_Unknown; DbgLanguage language = DbgLanguage_Unknown;
if (expr.StartsWith("@Beef:")) if (expr.StartsWith("@Beef:"))