From 0b6ccbdd10f8b4dc0c1c158217811f59a23f2a4f Mon Sep 17 00:00:00 2001
From: Max Charlamb <44248479+max-charlamb@users.noreply.github.com>
Date: Fri, 26 Sep 2025 15:38:44 -0400
Subject: [PATCH 1/4] add TriageDumpLocalVarLookup test
---
debuggees.sln | 43 +++++++++++++++++++
.../TriageDumpLocalVarLookup/Program.cs | 26 +++++++++++
.../TriageDumpLocalVarLookup.csproj | 7 +++
src/SOS/SOS.UnitTests/SOS.cs | 24 +++++++++--
.../Scripts/TriageDumpLocalVarLookup.script | 15 +++++++
5 files changed, 112 insertions(+), 3 deletions(-)
create mode 100644 src/SOS/SOS.UnitTests/Debuggees/TriageDumpLocalVarLookup/Program.cs
create mode 100644 src/SOS/SOS.UnitTests/Debuggees/TriageDumpLocalVarLookup/TriageDumpLocalVarLookup.csproj
create mode 100644 src/SOS/SOS.UnitTests/Scripts/TriageDumpLocalVarLookup.script
diff --git a/debuggees.sln b/debuggees.sln
index 28ecfb5ea3..6bc9960858 100644
--- a/debuggees.sln
+++ b/debuggees.sln
@@ -51,6 +51,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FindRootsOlderGeneration",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DumpGCData", "src\SOS\SOS.UnitTests\Debuggees\DumpGCData\DumpGCData.csproj", "{CBE13BD1-EA24-4A95-818C-EE6FFA4F09A5}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TriageDumpLocalVarLookup", "src\SOS\SOS.UnitTests\Debuggees\TriageDumpLocalVarLookup\TriageDumpLocalVarLookup.csproj", "{B042D2AB-D74C-46D8-94DD-68E9AA293FF5}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Checked|Any CPU = Checked|Any CPU
@@ -835,6 +837,46 @@ Global
{CBE13BD1-EA24-4A95-818C-EE6FFA4F09A5}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{CBE13BD1-EA24-4A95-818C-EE6FFA4F09A5}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
{CBE13BD1-EA24-4A95-818C-EE6FFA4F09A5}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|Any CPU.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|ARM.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|ARM.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|ARM64.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|ARM64.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|x64.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Checked|x86.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|ARM.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|x64.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Debug|x86.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|ARM.ActiveCfg = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|ARM.Build.0 = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|ARM64.Build.0 = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|x64.ActiveCfg = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|x64.Build.0 = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|x86.ActiveCfg = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.Release|x86.Build.0 = Release|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|ARM.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|ARM.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|ARM64.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|ARM64.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -863,6 +905,7 @@ Global
{AE071195-19FD-4215-87A9-D4A77A4ACC52} = {D25F6D55-E7B6-4231-F185-513E693BEEA2}
{B7954E17-D190-42F2-B34F-284BCA70FD97} = {D25F6D55-E7B6-4231-F185-513E693BEEA2}
{CBE13BD1-EA24-4A95-818C-EE6FFA4F09A5} = {D25F6D55-E7B6-4231-F185-513E693BEEA2}
+ {B042D2AB-D74C-46D8-94DD-68E9AA293FF5} = {D25F6D55-E7B6-4231-F185-513E693BEEA2}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {46465737-C938-44FC-BE1A-4CE139EBB5E0}
diff --git a/src/SOS/SOS.UnitTests/Debuggees/TriageDumpLocalVarLookup/Program.cs b/src/SOS/SOS.UnitTests/Debuggees/TriageDumpLocalVarLookup/Program.cs
new file mode 100644
index 0000000000..ec183bee88
--- /dev/null
+++ b/src/SOS/SOS.UnitTests/Debuggees/TriageDumpLocalVarLookup/Program.cs
@@ -0,0 +1,26 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Diagnostics;
+
+namespace TriageDumpLocalVarLookup;
+
+internal class Program
+{
+ static public void Main()
+ {
+ int intValue = 42;
+ string stringValue = "Hello, World!";
+
+ PrintValues(intValue, stringValue);
+ }
+
+ static void PrintValues(int intValue, string stringValue)
+ {
+ int length = stringValue.Length;
+ Debugger.Break();
+ Console.WriteLine($"intValue: {intValue}");
+ Console.WriteLine($"stringValue: {stringValue} (length = {length})");
+ }
+}
\ No newline at end of file
diff --git a/src/SOS/SOS.UnitTests/Debuggees/TriageDumpLocalVarLookup/TriageDumpLocalVarLookup.csproj b/src/SOS/SOS.UnitTests/Debuggees/TriageDumpLocalVarLookup/TriageDumpLocalVarLookup.csproj
new file mode 100644
index 0000000000..644ea7fa32
--- /dev/null
+++ b/src/SOS/SOS.UnitTests/Debuggees/TriageDumpLocalVarLookup/TriageDumpLocalVarLookup.csproj
@@ -0,0 +1,7 @@
+
+
+ Exe
+ $(BuildProjectFramework)
+ $(SupportedSubProcessTargetFrameworks)
+
+
diff --git a/src/SOS/SOS.UnitTests/SOS.cs b/src/SOS/SOS.UnitTests/SOS.cs
index 3a66a4046f..2a6564fc6f 100644
--- a/src/SOS/SOS.UnitTests/SOS.cs
+++ b/src/SOS/SOS.UnitTests/SOS.cs
@@ -139,7 +139,8 @@ internal static async Task RunTest(
string testName = null,
bool testLive = true,
bool testDump = true,
- bool testTriage = false)
+ bool testTriage = false,
+ SOSRunner.DumpGenerator dumpGenerator = SOSRunner.DumpGenerator.CreateDump)
{
await RunTest(scriptName,
new SOSRunner.TestInformation
@@ -149,7 +150,8 @@ await RunTest(scriptName,
TestLive = testLive,
TestDump = testDump,
DebuggeeName = debuggeeName,
- DumpType = SOSRunner.DumpType.Heap
+ DumpType = SOSRunner.DumpType.Heap,
+ DumpGenerator = dumpGenerator,
},
output);
@@ -165,7 +167,8 @@ await RunTest(scriptName,
TestLive = false,
TestDump = testDump,
DebuggeeName = debuggeeName,
- DumpType = SOSRunner.DumpType.Triage
+ DumpType = SOSRunner.DumpType.Triage,
+ DumpGenerator = dumpGenerator,
},
output);
}
@@ -234,6 +237,21 @@ public SOS(ITestOutputHelper output)
public static IEnumerable