Skip to content

Commit f09edf7

Browse files
authored
Merge main into release (#5868)
### General announcements General fixes and improvements across SOS debugger commands, macOS dump analysis, and the diagnostic tools since v10.0.721401. ### dotnet-dump / SOS - **`!gcinfo` GC info v5 support**: The `GCInfoDecoder`/`GCInfoDumper` sources were synchronized with dotnet/runtime to parse GC info **version 5**, keeping `!gcinfo` working against current runtime builds. (#5862) - `!threadpool` now properly enumerates assignable work item queues - Adds support for 11.0 preview 4 runtimes. - Much faster SOS-in-lldb memory reads for macOS. - Fixes in crash dump special buffer detection on Apple Silicon cores. - Modules that live in the macOS 11+ dyld shared cache are now identified and skipped during version-string extraction, avoiding unnecessary symbol-server downloads and timeouts. ### dotnet-gcdump - **Clearer `convert` errors**: `dotnet-gcdump convert` now emits actionable messages when the input is not a valid nettrace file, contains no GC heap events, or holds an incomplete heap dump, instead of failing opaquely. (#5814) ### Other notable changes - **Source Link for SOS native libraries**: Added Source Link support for the SOS native libraries, enabling source-level debugging into the native SOS binaries. (#5703)
2 parents 3f576a7 + dc96962 commit f09edf7

128 files changed

Lines changed: 3049 additions & 1712 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/copilot/settings.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"extraKnownMarketplaces": {
3+
"dotnet-arcade-skills": {
4+
"source": {
5+
"source": "github",
6+
"repo": "dotnet/arcade-skills"
7+
}
8+
}
9+
},
10+
"enabledPlugins": {
11+
"dotnet-dnceng@dotnet-arcade-skills": true
12+
}
13+
}

.github/policies/resourceManagement.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ configuration:
3636
days: 3
3737
actions:
3838
- addReply:
39-
reply: Hi @${issueAuthor}. We are closing this issue due to inactivity. If you comment within 30 days it will automatically reopen. If you are not the author of this issue and you're facing the same problem, feel free to open a new issue referencing this one.
39+
reply: Hi ${issueAuthor}. We are closing this issue due to inactivity. If you comment within 30 days it will automatically reopen. If you are not the author of this issue and you're facing the same problem, feel free to open a new issue referencing this one.
4040
- closeIssue
4141
- description: '[Idle Issue Management] Add no recent activity label to issues'
4242
frequencies:
@@ -174,7 +174,7 @@ configuration:
174174
label: 'Needs: Author Feedback'
175175
then:
176176
- addReply:
177-
reply: 'Hi @${issueAuthor}. We have added the "Needs: Author Feedback" label to this issue, which indicates that we have an open question for you before we can take further action. This issue will be closed automatically in 7 days if we do not hear back from you by then - please feel free to re-open it if you come back to this issue after that time.'
177+
reply: 'Hi ${issueAuthor}. We have added the "Needs: Author Feedback" label to this issue, which indicates that we have an open question for you before we can take further action. This issue will be closed automatically in 7 days if we do not hear back from you by then - please feel free to re-open it if you come back to this issue after that time.'
178178
triggerOnOwnActions: false
179179
onFailure:
180180
onSuccess:
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
---
2+
name: release-notes
3+
description: Generate release notes for the dotnet/diagnostics repository. Use when asked to generate release notes, a release summary, or a changelog.
4+
---
5+
6+
# Release Notes Generation
7+
8+
## Process
9+
10+
### 1. Determine the baseline
11+
12+
Find the **last published GitHub release** — not the latest git tag. This repo may have many version tags (e.g., `v10.0.*`, `v11.0.*`) that don't correspond to published releases.
13+
14+
```bash
15+
# Get the most recent published GitHub release tag for dotnet/diagnostics
16+
release_tag=$(gh release list --repo dotnet/diagnostics --limit 1 --json tagName --jq '.[0].tagName')
17+
echo "$release_tag"
18+
```
19+
20+
The last published release may be on a different branch (e.g., `release/9.0`). Even so, use the tag directly in `git log`**do NOT use `git merge-base`**. The release branch often contains snap/backport merges that bring `main` commits into the release, so `merge-base` returns an ancestor that is already included in the release tag. Instead:
21+
22+
```bash
23+
# Correct: use the tag directly — git handles cross-branch reachability
24+
git log <release-tag>..HEAD --oneline --first-parent
25+
```
26+
27+
This ensures commits already reachable from the release tag (via snap merges or backports) are excluded.
28+
29+
### 2. Get the commit list
30+
31+
List all first-parent commits from the release tag to HEAD, excluding dependency flow PRs:
32+
33+
```bash
34+
git log <release-tag>..HEAD --oneline --first-parent
35+
```
36+
37+
Filter out:
38+
- `[main] Update dependencies from *`
39+
- `Update dependencies from *`
40+
- Pure test infrastructure changes (test reorganization, CI image updates, SDK bumps)
41+
- Build/CI plumbing (SDK updates, pipeline config, dependabot changes)
42+
43+
### 3. Investigate each PR
44+
45+
For each user-facing PR, launch **parallel explore agents** (one per group of 3-5 related PRs) to read:
46+
- PR body (`get` method)
47+
- Review comments (`get_review_comments` method)
48+
- General comments (`get_comments` method)
49+
50+
Focus on:
51+
- **What** user-visible behavior changed
52+
- **Why** — what issue it solves, what feature it adds
53+
- **Breaking changes** or UX surprises discussed in review threads
54+
- Concrete examples (before/after output, error messages)
55+
56+
### 4. Write the release notes
57+
58+
Follow the format used in the latest release to get a sense of the current format used. For example, for `v9.0.661903` the structure follows the following pattern:
59+
60+
```markdown
61+
### General announcements
62+
63+
Brief summary.
64+
65+
### dotnet-dump / SOS
66+
67+
- **Feature/fix name**: Description focusing on WHY and user impact. (#PR)
68+
69+
#### SOS Bug Fixes
70+
71+
- **Command affected**: What was wrong, what's fixed. (#PR)
72+
73+
### dotnet-trace
74+
75+
- **collect-linux improvements**: Group related sub-items.
76+
77+
### dotnet-counters
78+
79+
- **Feature**: Description. (#PR)
80+
81+
### Microsoft.Diagnostics.NETCore.Client
82+
83+
- **Feature**: Description. (#PR)
84+
85+
### Other notable changes
86+
87+
- Items that don't fit above categories.
88+
```
89+
90+
### 5. Style guidelines
91+
92+
- Focus on **why** a change matters to users, not implementation details
93+
- Include issue references where available: `([#1234](https://github.com/dotnet/diagnostics/issues/1234), #5678)`
94+
- Group related fixes (e.g., all `collect-linux` terminal fixes together)
95+
- Call out breaking changes or UX changes explicitly
96+
- Omit purely internal changes (refactors, test moves, CI config) unless they have user impact
97+
- Use bold for command names and flags: **`!dumpheap -stat -bycount`**
98+
99+
## Example output
100+
101+
See the release at https://github.com/dotnet/diagnostics/releases/tag/v9.0.661903 for format reference.

Directory.Build.props

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
</PropertyGroup>
1515

1616
<PropertyGroup>
17+
<RepositoryUrl>https://github.com/dotnet/diagnostics</RepositoryUrl>
1718
<PackageIconUrl>http://go.microsoft.com/fwlink/?LinkID=288859</PackageIconUrl>
1819
<RepositoryType>git</RepositoryType>
1920
<PackageLicenseExpression>MIT</PackageLicenseExpression>
@@ -72,7 +73,7 @@
7273
<NetCoreAppMinVersion>8.0</NetCoreAppMinVersion>
7374
<NetCoreAppMinTargetFramework>net$(NetCoreAppMinVersion)</NetCoreAppMinTargetFramework>
7475
<!-- This is the list of TFMs we build our debuggees and tracees as. -->
75-
<SupportedSubProcessTargetFrameworks>net8.0;net9.0;net10.0</SupportedSubProcessTargetFrameworks>
76+
<SupportedSubProcessTargetFrameworks>net8.0;net9.0;net10.0;net11.0</SupportedSubProcessTargetFrameworks>
7677
<!-- This is the list of TFMs we build our unit tests as. -->
7778
<SupportedXUnitTestTargetFrameworks>net8.0</SupportedXUnitTestTargetFrameworks>
7879
<!-- Arcade wants to be opinionated and use embedded PDBs for CI/local builds.

NuGet.config

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
<!-- Begin: Package sources from dotnet-runtime -->
1414
<!-- End: Package sources from dotnet-runtime -->
1515
<!--End: Package sources managed by Dependency Flow automation. Do not edit the sources above.-->
16+
<add key="dotnet11" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json" />
17+
<add key="dotnet11-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11-transport/nuget/v3/index.json" />
1618
<add key="dotnet10" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10/nuget/v3/index.json" />
1719
<add key="dotnet10-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-transport/nuget/v3/index.json" />
1820
<add key="dotnet9" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9/nuget/v3/index.json" />

build.sln

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GCPOH", "src\tests\SOS.Unit
9191
EndProject
9292
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GCWhere", "src\tests\SOS.UnitTests\Debuggees\GCWhere\GCWhere.csproj", "{BCBCA951-17AC-43C3-BC1F-ED8137C08923}"
9393
EndProject
94+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InterpreterStackInterleavedTest", "src\tests\SOS.UnitTests\Debuggees\InterpreterStackInterleavedTest\InterpreterStackInterleavedTest.csproj", "{89B0E999-8ED6-442B-B813-6B85DE1A779C}"
95+
EndProject
96+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Trampoline", "src\tests\SOS.UnitTests\Debuggees\InterpreterStackInterleavedTest\Trampoline\Trampoline.csproj", "{34467429-F20A-4EE0-A895-25A601F28AFC}"
97+
EndProject
98+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InterpreterStackTest", "src\tests\SOS.UnitTests\Debuggees\InterpreterStackTest\InterpreterStackTest.csproj", "{0D4641C7-EA69-41EC-847A-16266D2A40F8}"
99+
EndProject
94100
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LineNums", "src\tests\SOS.UnitTests\Debuggees\LineNums\LineNums.csproj", "{D39F4E7C-558C-4697-8692-9DD92DB97D92}"
95101
EndProject
96102
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniDumpLocalVarLookup", "src\tests\SOS.UnitTests\Debuggees\MiniDumpLocalVarLookup\MiniDumpLocalVarLookup.csproj", "{57A8B0FF-5FD9-4E8E-806F-3F25E30B3E74}"
@@ -1021,6 +1027,60 @@ Global
10211027
{BCBCA951-17AC-43C3-BC1F-ED8137C08923}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
10221028
{BCBCA951-17AC-43C3-BC1F-ED8137C08923}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
10231029
{BCBCA951-17AC-43C3-BC1F-ED8137C08923}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
1030+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1031+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Debug|Any CPU.Build.0 = Debug|Any CPU
1032+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Debug|x64.ActiveCfg = Debug|Any CPU
1033+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Debug|x64.Build.0 = Debug|Any CPU
1034+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Debug|x86.ActiveCfg = Debug|Any CPU
1035+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Debug|x86.Build.0 = Debug|Any CPU
1036+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Release|Any CPU.ActiveCfg = Release|Any CPU
1037+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Release|Any CPU.Build.0 = Release|Any CPU
1038+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Release|x64.ActiveCfg = Release|Any CPU
1039+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Release|x64.Build.0 = Release|Any CPU
1040+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Release|x86.ActiveCfg = Release|Any CPU
1041+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Release|x86.Build.0 = Release|Any CPU
1042+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
1043+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Checked|x64.ActiveCfg = Debug|Any CPU
1044+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.Checked|x86.ActiveCfg = Debug|Any CPU
1045+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
1046+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
1047+
{89B0E999-8ED6-442B-B813-6B85DE1A779C}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
1048+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1049+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
1050+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Debug|x64.ActiveCfg = Debug|Any CPU
1051+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Debug|x64.Build.0 = Debug|Any CPU
1052+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Debug|x86.ActiveCfg = Debug|Any CPU
1053+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Debug|x86.Build.0 = Debug|Any CPU
1054+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
1055+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Release|Any CPU.Build.0 = Release|Any CPU
1056+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Release|x64.ActiveCfg = Release|Any CPU
1057+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Release|x64.Build.0 = Release|Any CPU
1058+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Release|x86.ActiveCfg = Release|Any CPU
1059+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Release|x86.Build.0 = Release|Any CPU
1060+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
1061+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Checked|x64.ActiveCfg = Debug|Any CPU
1062+
{34467429-F20A-4EE0-A895-25A601F28AFC}.Checked|x86.ActiveCfg = Debug|Any CPU
1063+
{34467429-F20A-4EE0-A895-25A601F28AFC}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
1064+
{34467429-F20A-4EE0-A895-25A601F28AFC}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
1065+
{34467429-F20A-4EE0-A895-25A601F28AFC}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
1066+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1067+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
1068+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Debug|x64.ActiveCfg = Debug|Any CPU
1069+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Debug|x64.Build.0 = Debug|Any CPU
1070+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Debug|x86.ActiveCfg = Debug|Any CPU
1071+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Debug|x86.Build.0 = Debug|Any CPU
1072+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
1073+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Release|Any CPU.Build.0 = Release|Any CPU
1074+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Release|x64.ActiveCfg = Release|Any CPU
1075+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Release|x64.Build.0 = Release|Any CPU
1076+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Release|x86.ActiveCfg = Release|Any CPU
1077+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Release|x86.Build.0 = Release|Any CPU
1078+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
1079+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Checked|x64.ActiveCfg = Debug|Any CPU
1080+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.Checked|x86.ActiveCfg = Debug|Any CPU
1081+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
1082+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
1083+
{0D4641C7-EA69-41EC-847A-16266D2A40F8}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
10241084
{D39F4E7C-558C-4697-8692-9DD92DB97D92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
10251085
{D39F4E7C-558C-4697-8692-9DD92DB97D92}.Debug|Any CPU.Build.0 = Debug|Any CPU
10261086
{D39F4E7C-558C-4697-8692-9DD92DB97D92}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -1506,6 +1566,9 @@ Global
15061566
{79B6C88E-00FC-4990-A4AC-1EB1549F3542} = {C02DE277-7341-4C63-B105-BA695F40277F}
15071567
{C69F541A-82B2-4545-A371-72D38218C569} = {C02DE277-7341-4C63-B105-BA695F40277F}
15081568
{BCBCA951-17AC-43C3-BC1F-ED8137C08923} = {C02DE277-7341-4C63-B105-BA695F40277F}
1569+
{89B0E999-8ED6-442B-B813-6B85DE1A779C} = {C02DE277-7341-4C63-B105-BA695F40277F}
1570+
{34467429-F20A-4EE0-A895-25A601F28AFC} = {C02DE277-7341-4C63-B105-BA695F40277F}
1571+
{0D4641C7-EA69-41EC-847A-16266D2A40F8} = {C02DE277-7341-4C63-B105-BA695F40277F}
15091572
{D39F4E7C-558C-4697-8692-9DD92DB97D92} = {C02DE277-7341-4C63-B105-BA695F40277F}
15101573
{57A8B0FF-5FD9-4E8E-806F-3F25E30B3E74} = {C02DE277-7341-4C63-B105-BA695F40277F}
15111574
{A39F9BC5-892F-4B68-9B2A-C9EF99EEDBF0} = {C02DE277-7341-4C63-B105-BA695F40277F}

diagnostics.yml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -251,21 +251,21 @@ extends:
251251
- configuration: Debug
252252
architecture: x64
253253

254-
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
255-
- template: /eng/pipelines/build.yml
256-
parameters:
257-
jobTemplate: ${{ variables.jobTemplate }}
258-
name: Fedora_43
259-
osGroup: Linux
260-
container: test_fedora
261-
dependsOn: Linux
262-
testOnly: true
263-
buildConfigs:
264-
- configuration: Release
265-
architecture: x64
266-
- ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
267-
- configuration: Debug
268-
architecture: x64
254+
# - ${{ if ne(variables['System.TeamProject'], 'public') }}:
255+
# - template: /eng/pipelines/build.yml
256+
# parameters:
257+
# jobTemplate: ${{ variables.jobTemplate }}
258+
# name: Fedora_43
259+
# osGroup: Linux
260+
# container: test_fedora
261+
# dependsOn: Linux
262+
# testOnly: true
263+
# buildConfigs:
264+
# - configuration: Release
265+
# architecture: x64
266+
# - ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
267+
# - configuration: Debug
268+
# architecture: x64
269269

270270
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
271271
- stage: package

documentation/privatebuildtesting.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,18 @@ Because the DAC is not properly signed for a private runtime build there are a c
5454
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MiniDumpAuxiliaryDlls]
5555
"C:\diagnostics\.dotnet\shared\Microsoft.NETCore.App\5.0.0-alpha.1.20102.3\coreclr.dll"="C:\diagnostics\.dotnet\shared\Microsoft.NETCore.App\5.0.0-alpha.1.20102.3\mscordaccore.dll"
5656
```
57+
58+
#### Interpreter-frame tests
59+
60+
The interpreter-frame SOS tests (`SOSInterpreterTests`) are skipped by default because `FEATURE_INTERPRETER` is only compiled into Debug/Checked CoreCLR drops (see `src/coreclr/clrfeatures.cmake` in dotnet/runtime) and is therefore unavailable on the public Release runtimes the SOS tests download by default.
61+
62+
The opt-in is layered:
63+
64+
1. **Per-debuggee csproj flag.** `Debuggees/InterpreterStackTest/InterpreterStackTest.csproj` declares `<InterpreterTest>true</InterpreterTest>` to mark itself as an interpreter SOS test. Methods that should run on the interpreter follow the convention of being named with the prefix `InterpTestMethod` (e.g. `InterpTestMethodRunNested`). The csproj does not need to specify the method-name pattern; it is shared across all interpreter-test debuggees.
65+
2. **Per-test gate.** `SOS_TEST_INTERPRETER=true` (or `-testInterpreter` to `Build.cmd`/`build.sh`) unskips the `SOSInterpreterTests.InterpreterStackTest` test method. SOSRunner sets `DOTNET_Interpreter=InterpTestMethod*` on the debuggee process at launch when this gate is on. The shared `Debuggees/Directory.Build.targets` additionally no-ops any direct `dotnet build` of an interpreter-test debuggee when the gate is unset, emitting a message rather than producing a binary that wouldn't exercise the interpreter. Other SOS tests are unaffected.
66+
67+
To run them:
68+
69+
1. Build the runtime as Checked: `build.cmd -subset clr -c Checked` (or `-c Debug`).
70+
2. Overlay that drop onto each `artifacts\dotnet-test\shared\Microsoft.NETCore.App\<version>` directory exactly as for any private build (see the example scripts above).
71+
3. Set `SOS_TEST_INTERPRETER=true` (or pass `-testInterpreter` to `Build.cmd`/`build.sh` when running with `-test`).

dotnet.cmd

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ set /p dotnetPath=<%~dp0artifacts\toolset\sdk.txt
1414
:: misleading value (such as 'MCD' in HP PCs) may lead to build breakage (issue: #69).
1515
set Platform=
1616

17-
:: Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism
18-
set DOTNET_MULTILEVEL_LOOKUP=0
19-
2017
:: Disable first run since we want to control all package sources
2118
set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
2219

dotnet.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ while [[ -h $source ]]; do
1212
done
1313
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
1414

15-
# Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism
16-
export DOTNET_MULTILEVEL_LOOKUP=0
17-
1815
# Disable first run since we want to control all package sources
1916
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
2017

0 commit comments

Comments
 (0)