GCWhere failure diagnostics.
authorMike McLaughlin <mikem@microsoft.com>
Tue, 5 Feb 2019 23:52:12 +0000 (15:52 -0800)
committerMike McLaughlin <mikem@microsoft.com>
Wed, 6 Feb 2019 18:18:50 +0000 (10:18 -0800)
src/SOS/SOS.UnitTests/Debuggees/GCWhere/GCWhere.cs
src/SOS/SOS.UnitTests/Scripts/GCTests.script
src/SOS/Strike/util.h

index dadbcadc0065f1766312029000b1e685e156574f..37997e5cff3e3c285b628d5cd53b8be61ed23424 100644 (file)
@@ -30,12 +30,17 @@ class GCWhere
     static int Main() 
     {
         GCWhere temp = new GCWhere("This is a string!!");
+        int genFirstTime = GC.GetGeneration(temp);
         Debugger.Break();   // GCWhere should temp in Gen0        
         GC.Collect();
+        int genSecondTime = GC.GetGeneration(temp);
         Debugger.Break();   // GCWhere should temp in Gen1                
         GC.Collect();
+        int genThirdTime = GC.GetGeneration(temp);
         Debugger.Break();   // GCWhere should temp in Gen2                
         GC.Collect();
+        int genFourthTime = GC.GetGeneration(temp);
+        Console.WriteLine("1st: {0} 2nd: {1}, 3rd: {2} 4th: {3}", genFirstTime, genSecondTime, genThirdTime, genFourthTime);
         Debugger.Break();   // GCWhere should temp in Gen2                
         PrintIt(temp);
         GC.KeepAlive(temp);
index b4d6206552761b6cd7f4581cb7f35d4cf26e633c..bb42e33779376e9fded4df49d747a3214a5f6063 100644 (file)
@@ -32,11 +32,11 @@ VERIFY:<HEXVAL>\s+0\s+\d\s+<HEXVAL>\s+<HEXVAL>\s+<HEXVAL>\s+0x<HEXVAL>\s*\(\d+\)
 
 SOSCOMMAND:GCRoot <PREVPOUT>
 VERIFY:.*Thread <HEXVAL>:
-VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[Gg][Cc][Ww]here\.cs\s+@\s+33\]\s+
+VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[Gg][Cc][Ww]here\.cs\s+@\s+34\]\s+
 
 SOSCOMMAND:GCRoot -all <PREVPOUT>
 VERIFY:.*Thread <HEXVAL>:
-VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[Gg][Cc][Ww]here\.cs\s+@\s+33\]\s+
+VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[Gg][Cc][Ww]here\.cs\s+@\s+34\]\s+
 
 SOSCOMMAND:DumpObj <PREVPOUT>
 VERIFY:\s*Name:\s+GCWhere\s+
@@ -103,11 +103,11 @@ VERIFY:<HEXVAL>\s+1\s+\d\s+<HEXVAL>\s+<HEXVAL>\s+<HEXVAL>\s+0x<HEXVAL>\s*\(\d+\)
 
 SOSCOMMAND:GCRoot <PREVPOUT>
 VERIFY:.*Thread <HEXVAL>:
-VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[/|\\][Gg][Cc][Ww]here\.cs\s+@\s+35\]\s+
+VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[/|\\][Gg][Cc][Ww]here\.cs\s+@\s+37\]\s+
 
 SOSCOMMAND:GCRoot -all <PREVPOUT>
 VERIFY:.*Thread <HEXVAL>:
-VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[Gg][Cc][Ww]here\.cs\s+@\s+35\]\s+
+VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[Gg][Cc][Ww]here\.cs\s+@\s+37\]\s+
 
 SOSCOMMAND:DumpObj <PREVPOUT>
 VERIFY:\s*Name:\s+GCWhere\s+
@@ -137,6 +137,7 @@ IFDEF:CDB
 VERIFY:Break instruction exception - code 80000003
 ENDIF:CDB
 
+SOSCOMMAND:EEHeap -gc
 SOSCOMMAND:DumpStackObjects
 SOSCOMMAND:GCWhere <POUT>\w+\s+(<HEXVAL>)\s+([Gg][Cc]where!\$0_)*GCWhere\s+<POUT>
 # we care that the Gen is 2
@@ -144,7 +145,7 @@ VERIFY:<HEXVAL>\s+2\s+\d\s+<HEXVAL>\s+<HEXVAL>\s+<HEXVAL>\s+0x<HEXVAL>\s*\(\d+\)
 
 SOSCOMMAND:GCRoot <PREVPOUT>
 VERIFY:.*Thread <HEXVAL>:
-VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[/|\\][Gg][Cc][Ww]here\.cs\s+@\s+37\]\s+
+VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[/|\\][Gg][Cc][Ww]here\.cs\s+@\s+40\]\s+
 
 # Continue to the next DebugBreak
 CONTINUE
@@ -152,14 +153,15 @@ IFDEF:CDB
 VERIFY:Break instruction exception - code 80000003
 ENDIF:CDB
 
+SOSCOMMAND:EEHeap -gc
 SOSCOMMAND:DumpStackObjects
 SOSCOMMAND:GCWhere <POUT>\w+\s+(<HEXVAL>)\s+([Gg][Cc]where!\$0_)*GCWhere\s+<POUT>
-# we care that the Gen is still 2
-VERIFY:<HEXVAL>\s+2\s+\d\s+<HEXVAL>\s+<HEXVAL>\s+<HEXVAL>\s+0x<HEXVAL>\s*\(\d+\)
+# we care that the Gen is still 2 or 0 on Windows 3.x 
+VERIFY:<HEXVAL>\s+[02]\s+\d\s+<HEXVAL>\s+<HEXVAL>\s+<HEXVAL>\s+0x<HEXVAL>\s*\(\d+\)
 
 SOSCOMMAND:GCRoot <PREVPOUT>
 VERIFY:.*Thread <HEXVAL>:
-VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[/|\\][Gg][Cc][Ww]here\.cs\s+@\s+39\]\s+
+VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+GCWhere\.Main\(\)\s+\[.*[/|\\][Gg][Cc][Ww]here\.cs\s+@\s+44\]\s+
 
 # Continue to the next DebugBreak
 CONTINUE
index 9660e009a79bed4be824df3086ef6fd413a38371..625a02298ccef5e4339ff3c787a95a0c95f398f8 100644 (file)
@@ -46,15 +46,15 @@ DECLARE_HANDLE(OBJECTHANDLE);
 struct IMDInternalImport;
 
 #if defined(_TARGET_WIN64_)
-#define WIN64_8SPACES ""
-#define WIN86_8SPACES "        "
+#define WIN64_8SPACES "        "
+#define WIN86_8SPACES ""
 #define POINTERSIZE "16"
 #define POINTERSIZE_HEX 16
 #define POINTERSIZE_BYTES 8
 #define POINTERSIZE_TYPE "I64"
 #else
-#define WIN64_8SPACES "        "
-#define WIN86_8SPACES ""
+#define WIN64_8SPACES ""
+#define WIN86_8SPACES "        "
 #define POINTERSIZE "8"
 #define POINTERSIZE_HEX 8
 #define POINTERSIZE_BYTES 4