diff --git a/src/ExpressionEvaluator/Core/Source/ResultProvider/Formatter.Values.cs b/src/ExpressionEvaluator/Core/Source/ResultProvider/Formatter.Values.cs index 3fcbcabcc0999..796e253cdc0cc 100644 --- a/src/ExpressionEvaluator/Core/Source/ResultProvider/Formatter.Values.cs +++ b/src/ExpressionEvaluator/Core/Source/ResultProvider/Formatter.Values.cs @@ -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) @@ -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)) diff --git a/src/ExpressionEvaluator/Core/Source/ResultProvider/Helpers/DkmEvaluationResultFlagsExtensions.cs b/src/ExpressionEvaluator/Core/Source/ResultProvider/Helpers/DkmEvaluationResultFlagsExtensions.cs index 7ac6e7d6784f3..da83b15d566f4 100644 --- a/src/ExpressionEvaluator/Core/Source/ResultProvider/Helpers/DkmEvaluationResultFlagsExtensions.cs +++ b/src/ExpressionEvaluator/Core/Source/ResultProvider/Helpers/DkmEvaluationResultFlagsExtensions.cs @@ -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 + ); } } } diff --git a/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmEvaluationFlags.cs b/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmEvaluationFlags.cs index 06f3603abe032..0ae022efd671d 100644 --- a/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmEvaluationFlags.cs +++ b/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmEvaluationFlags.cs @@ -29,5 +29,6 @@ public enum DkmEvaluationFlags NoExpansion = 65536, FilterToFavorites = 0x40000, UseSimpleDisplayString = 0x80000, + IncreaseMaxStringSize = 0x100000 } } diff --git a/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmEvaluationResultFlags.cs b/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmEvaluationResultFlags.cs index e49910d783444..ec7641f39765c 100644 --- a/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmEvaluationResultFlags.cs +++ b/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmEvaluationResultFlags.cs @@ -46,5 +46,7 @@ public enum DkmEvaluationResultFlags HasFavorites = 0x4000000, IsObjectReplaceable = 0x8000000, ExpansionHasSideEffects = 0x10000000, + CanEvaluateWithoutOptimization = 0x20000000, + TruncatedString = 0x40000000 } } diff --git a/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmInspectionContext.cs b/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmInspectionContext.cs index 888d71070cdef..68d3291145f6e 100644 --- a/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmInspectionContext.cs +++ b/src/ExpressionEvaluator/Core/Test/ResultProvider/Debugger/Engine/DkmInspectionContext.cs @@ -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