MCPcopy Create free account
hub / github.com/beefytech/Beef / DbgTypedValueToString

Method DbgTypedValueToString

IDEHelper/WinDebugger.cpp:6856–8593  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6854}
6855
6856String WinDebugger::DbgTypedValueToString(const DbgTypedValue& origTypedValue, const StringImpl& expr, DwFormatInfo& formatInfo, DbgExprEvaluator* optEvaluator, bool fullPrecision)
6857{
6858 BP_ZONE("WinDebugger::DbgTypedValueToString");
6859
6860 DbgTypedValue typedValue = origTypedValue;
6861 auto dbgCompileUnit = typedValue.mType->mCompileUnit;
6862 auto dbgModule = typedValue.mType->GetDbgModule();
6863 auto language = origTypedValue.mType->GetLanguage();
6864 if (language == DbgLanguage_Unknown)
6865 language = formatInfo.mLanguage;
6866 formatInfo.mLanguage = language;
6867 bool isBeef = language == DbgLanguage_Beef;
6868
6869 char str[32];
6870 bool readFailed = false;
6871 bool isCompositeType = false;
6872 bool isSizedArray = false;
6873 bool isEnum = false;
6874 int64 enumVal = 0;
6875 String result;
6876 String stringViewData;
6877
6878 DwDisplayInfo* displayInfo = GetDisplayInfo(formatInfo.mReferenceId);
6879 bool wantStringView = (displayInfo->mFormatStr == "str") && (formatInfo.mAllowStringView);
6880
6881 DbgType* origValueType = typedValue.mType;
6882 bool origHadRef = false;
6883 DbgType* dwValueType = typedValue.mType->RemoveModifiers(&origHadRef);
6884
6885 if (dwValueType == NULL)
6886 dwValueType = dbgModule->GetPrimitiveType(DbgType_Void, language);
6887 else
6888 dwValueType = dwValueType->GetPrimaryType();
6889
6890 if (dwValueType->mTypeCode == DbgType_TypeDef)
6891 {
6892 DbgTypedValue realTypedVal = typedValue;
6893 realTypedVal.mType = dwValueType->mTypeParam;
6894 return DbgTypedValueToString(realTypedVal, expr, formatInfo, optEvaluator);
6895 }
6896
6897 if (formatInfo.mRawString)
6898 {
6899 if ((dwValueType->mTypeCode != DbgType_Struct) && (dwValueType->mTypeCode != DbgType_Class) && (dwValueType->mTypeCode != DbgType_Ptr) && (dwValueType->mTypeCode != DbgType_SizedArray))
6900 return "";
6901 }
6902
6903 auto _ShowArraySummary = [&](String& retVal, addr_target ptrVal, int64 arraySize, DbgType* innerType)
6904 {
6905 String displayString;
6906 displayString += "{";
6907 for (int idx = 0; idx < arraySize; idx++)
6908 {
6909 if (formatInfo.mTotalSummaryLength + retVal.length() + displayString.length() > 255)
6910 {
6911 displayString += "...";
6912 break;
6913 }

Callers

nothing calls this directly

Calls 15

WrapWithModifiersFunction · 0.85
ConvertFloat80ToDoubleFunction · 0.85
DbgTypedValueClass · 0.85
StringClass · 0.85
GetDbgModuleMethod · 0.80
RemoveModifiersMethod · 0.80
GetPrimaryTypeMethod · 0.80
ToStringRawMethod · 0.80
SubstringMethod · 0.80
GetRegistersMethod · 0.80
FindSubProgramMethod · 0.80
FindSymbolAtMethod · 0.80

Tested by

no test coverage detected