1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Improved debugger string comparison

This commit is contained in:
Brian Fiete 2024-12-29 11:36:49 -08:00
parent 1b6d9808f3
commit 0bdfea7231
3 changed files with 33 additions and 14 deletions

View file

@ -5934,8 +5934,13 @@ void DbgExprEvaluator::PerformBinaryOperation(ASTREF(BfExpression*)& leftExpress
auto& displayStringList = debugVis->mStringViews;
DwFormatInfo formatInfo;
formatInfo.mCallStackIdx = mCallStackIdx;
formatInfo.mRawString = true;
formatInfo.mLanguage = language;
formatInfo.mNamespaceSearch = mNamespaceSearchStr;
formatInfo.mExplicitThis = mExplicitThis;
if (mReferenceId != NULL)
formatInfo.mReferenceId = *mReferenceId;
if (!displayEntry->mCondition.empty())
{
if (!mDebugger->EvalCondition(debugVis, dbgCompileUnit, useTypedValue, formatInfo, displayEntry->mCondition, dbgVisWildcardCaptures, displayString))
@ -5943,14 +5948,15 @@ void DbgExprEvaluator::PerformBinaryOperation(ASTREF(BfExpression*)& leftExpress
}
String displayStr = mDebugger->mDebugManager->mDebugVisualizers->DoStringReplace(displayEntry->mString, dbgVisWildcardCaptures);
mDebugger->ProcessEvalString(dbgCompileUnit, useTypedValue, displayStr, displayString, formatInfo, debugVis, false);
if (mDebugger->ProcessEvalString(dbgCompileUnit, useTypedValue, displayStr, displayString, formatInfo, debugVis, false))
{
bool isEq = displayString == resultTypedValue->mCharPtr;
bool isEq = displayString == resultTypedValue->mCharPtr;
auto boolType = mDbgModule->GetPrimitiveType(DbgType_Bool, GetLanguage());
mResult.mType = boolType;
mResult.mBool = isEq == ((binaryOp == BfBinaryOp_Equality) || (binaryOp == BfBinaryOp_StrictEquality));
return;
auto boolType = mDbgModule->GetPrimitiveType(DbgType_Bool, GetLanguage());
mResult.mType = boolType;
mResult.mBool = isEq == ((binaryOp == BfBinaryOp_Equality) || (binaryOp == BfBinaryOp_StrictEquality));
return;
}
}
}
}

View file

@ -6751,8 +6751,10 @@ String WinDebugger::ReadString(DbgTypeCode charType, intptr addr, bool isLocalAd
return retVal;
}
void WinDebugger::ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValue useTypedValue, String& evalStr, String& displayString, DwFormatInfo& formatInfo, DebugVisualizerEntry* debugVis, bool limitLength)
bool WinDebugger::ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValue useTypedValue, String& evalStr, String& displayString, DwFormatInfo& formatInfo, DebugVisualizerEntry* debugVis, bool limitLength)
{
bool success = true;
for (int i = 0; i < (int)evalStr.length(); i++)
{
char c = evalStr[i];
@ -6794,22 +6796,31 @@ void WinDebugger::ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValu
if ((formatInfo.mRawString) && (limitLength))
{
displayString = result;
return;
return success;
}
int crPos = result.IndexOf('\n');
if (crPos != -1)
displayString += result.Substring(0, crPos);
else
if (displayStrFormatInfo.mRawString)
{
displayString += result;
}
else
{
int crPos = result.IndexOf('\n');
if (crPos != -1)
displayString += result.Substring(0, crPos);
else
displayString += result;
}
}
else if (debugVis != NULL)
{
success = false;
displayString += "<DbgVis Failed>";
DbgVisFailed(debugVis, evalString, errors);
}
else
{
success = false;
displayString += "<Eval Failed>";
}
}
@ -6830,6 +6841,8 @@ void WinDebugger::ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValu
displayString += c;
}
return success;
}
static bool IsNormalChar(uint32 c)

View file

@ -516,7 +516,7 @@ public:
DbgTypedValue EvaluateInContext(DbgCompileUnit* dbgCompileUnit, const DbgTypedValue& contextTypedValue, const StringImpl& subExpr, DwFormatInfo* formatInfo = NULL, String* outReferenceId = NULL, String* outErrors = NULL);
bool EvalCondition(DebugVisualizerEntry* debugVis, DbgCompileUnit* dbgCompileUnit, DbgTypedValue typedVal, DwFormatInfo& formatInfo, const StringImpl& condition, const Array<String>& dbgVisWildcardCaptures, String& errorStr);
DwDisplayInfo* GetDisplayInfo(const StringImpl& referenceId);
void ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValue useTypedValue, String& evalStr, String& displayString, DwFormatInfo& formatInfo, DebugVisualizerEntry* debugVis, bool limitLength);
bool ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValue useTypedValue, String& evalStr, String& displayString, DwFormatInfo& formatInfo, DebugVisualizerEntry* debugVis, bool limitLength);
String ReadString(DbgTypeCode charType, intptr addr, bool isLocalAddr, intptr maxLength, DwFormatInfo& formatInfo, bool wantStringView);
String DbgTypedValueToString(const DbgTypedValue& typedValue, const StringImpl& expr, DwFormatInfo& formatFlags, DbgExprEvaluator* optEvaluator, bool fullPrecision = false);
bool ShouldShowStaticMember(DbgType* dbgType, DbgVariable* member);