2
0
Эх сурвалжийг харах

Ability to set debug format for summaries

Brian Fiete 5 жил өмнө
parent
commit
69d16f87f6

+ 14 - 3
IDEHelper/WinDebugger.cpp

@@ -466,8 +466,8 @@ static double ConvertFloat80ToDouble(const byte fp80[10])
 
 addr_target NS_BF_DBG::DecodeTargetDataPtr(const char*& strRef)
 {
-	addr_target val = (addr_target)stouln(strRef, sizeof(intptr) * 2);
-	strRef += sizeof(intptr) * 2;
+	addr_target val = (addr_target)stouln(strRef, sizeof(intptr_target) * 2);
+	strRef += sizeof(intptr_target) * 2;
 	return val;
 }
 
@@ -7699,6 +7699,9 @@ String WinDebugger::DbgTypedValueToString(const DbgTypedValue& origTypedValue, c
 						DbgType* primType = summaryType->mTypeParam;
 						String result;
 						
+						if (primType->IsInteger())
+							formatInfo.mTypeKindFlags = (DbgTypeKindFlags)(formatInfo.mTypeKindFlags | DbgTypeKindFlag_Int);
+
 						if ((dataPtr != 0) && (dataPtr != -1))
 						{
 							String evalString = "(" + primType->ToString() +  ")" + ptrDataStr;
@@ -7796,6 +7799,9 @@ String WinDebugger::DbgTypedValueToString(const DbgTypedValue& origTypedValue, c
 									result = "???";
 							}
 
+							if (member->mType->IsInteger())
+								formatInfo.mTypeKindFlags = (DbgTypeKindFlags)(formatInfo.mTypeKindFlags | DbgTypeKindFlag_Int);
+
 							if (formatInfo.mRawString)
 								return result;
 							
@@ -9070,7 +9076,12 @@ String WinDebugger::EvaluateContinue(DbgPendingExpr* pendingExpr, BfPassInstance
 		else if (checkType->IsInteger())
 			val += "\n:type\tint";
 		else if ((exprResult.mRegNum >= X64Reg_M128_XMM0) && (exprResult.mRegNum <= X64Reg_M128_XMM15))
-			val += "\n:type\tmm128";		
+			val += "\n:type\tmm128";
+		else
+			val += "\n:type\tvaluetype";
+
+		if ((pendingExpr->mFormatInfo.mTypeKindFlags & DbgTypeKindFlag_Int) != 0)
+			val += "\n:type\tint";
 
 		if (dbgExprEvaluator.mHadSideEffects)
 			val += "\n:sideeffects";

+ 8 - 0
IDEHelper/WinDebugger.h

@@ -269,6 +269,12 @@ public:
 	}
 };
 
+enum DbgTypeKindFlags
+{
+	DbgTypeKindFlag_None = 0,
+	DbgTypeKindFlag_Int = 1
+};
+
 struct DwFormatInfo
 {
 	int mCallStackIdx;
@@ -278,6 +284,7 @@ struct DwFormatInfo
 	bool mNoMembers;
 	bool mRawString;	
 	bool mNoEdit;
+	DbgTypeKindFlags mTypeKindFlags;
 	intptr mArrayLength;
 	intptr mOverrideCount;
 	intptr mMaxCount;
@@ -300,6 +307,7 @@ struct DwFormatInfo
 		mNoVisualizers = false;
 		mNoMembers = false;		
 		mNoEdit = false;
+		mTypeKindFlags = DbgTypeKindFlag_None;
 		mArrayLength = -1;
 		mOverrideCount = -1;
 		mMaxCount = -1;