Skip to content

Commit

Permalink
Honor Concord's TruncatedString flag and ensure GetUnderlyingString w…
Browse files Browse the repository at this point in the history
…orks for large strings
  • Loading branch information
chuckries committed Jul 31, 2023
1 parent ce75dbe commit 6e41739
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ private string GetValueStringForCharacter(DkmClrValue value, DkmInspectionContex

private bool HasUnderlyingString(DkmClrValue value, DkmInspectionContext inspectionContext)
{
return GetUnderlyingString(value, inspectionContext) != null;
return value.EvalFlags.HasFlag(DkmEvaluationResultFlags.TruncatedString) || GetUnderlyingString(value, inspectionContext) != null;
}

private string GetUnderlyingString(DkmClrValue value, DkmInspectionContext inspectionContext)
Expand Down Expand Up @@ -236,6 +236,12 @@ private string GetUnderlyingStringImpl(DkmClrValue value, DkmInspectionContext i

if (lmrType.IsString())
{
if (value.EvalFlags.HasFlag(DkmEvaluationResultFlags.TruncatedString))
{
var extendedInspectionContext = inspectionContext.With(DkmEvaluationFlags.IncreaseMaxStringSize);
return value.EvaluateToString(extendedInspectionContext);
}

return (string)value.HostObjectValue;
}
else if (!IsPredefinedType(lmrType))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,12 @@ public static bool Includes(this DkmEvaluationResultFlags flags, DkmEvaluationRe

internal static DkmInspectionContext With(this DkmInspectionContext inspectionContext, DkmEvaluationFlags flags)
{
return DkmInspectionContext.Create(
inspectionContext.InspectionSession,
inspectionContext.RuntimeInstance,
inspectionContext.Thread,
return inspectionContext.WithProperties(
inspectionContext.Timeout,
inspectionContext.EvaluationFlags | flags,
inspectionContext.FuncEvalFlags,
inspectionContext.Radix,
inspectionContext.Language,
inspectionContext.ReturnValue,
inspectionContext.AdditionalVisualizationData,
inspectionContext.AdditionalVisualizationDataPriority,
inspectionContext.ReturnValues);
inspectionContext.Radix
);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,6 @@ public enum DkmEvaluationFlags
NoExpansion = 65536,
FilterToFavorites = 0x40000,
UseSimpleDisplayString = 0x80000,
IncreaseMaxStringSize = 0x100000
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,7 @@ public enum DkmEvaluationResultFlags
HasFavorites = 0x4000000,
IsObjectReplaceable = 0x8000000,
ExpansionHasSideEffects = 0x10000000,
CanEvaluateWithoutOptimization = 0x20000000,
TruncatedString = 0x40000000
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ public string GetTypeName(DkmClrType ClrType, DkmClrCustomTypeInfo CustomTypeInf
{
return InspectionSession.InvokeFormatter(this, MethodId.GetTypeName, f => f.GetTypeName(this, ClrType, CustomTypeInfo, FormatSpecifiers));
}

public DkmInspectionContext WithProperties(uint Timeout, DkmEvaluationFlags EvaluationFlags, DkmFuncEvalFlags FuncEvalFlags, uint Radix)
{
return new DkmInspectionContext(
this.InspectionSession,
EvaluationFlags,
Radix,
this.RuntimeInstance);
}
}

public enum DkmFuncEvalFlags
Expand Down

0 comments on commit 6e41739

Please sign in to comment.