-
Notifications
You must be signed in to change notification settings - Fork 386
Snap main to release #5668
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Snap main to release #5668
+5,343
−2,140
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
On Win-x86, `FindRootsOlderGeneration` failed with double counting the
same GC Root. My guess is that the same GCRoot was found on multiple
subheaps, so adding deduplication logic during counting would account
for that.
Example failing test
```
SOSRunner processing SOS.FindRootsOlderGeneration
{
Running Process: D:\a\_work\1\s\.packages\cdb-sos\10.0.26100.1\runtimes\win-x86\native\cdb.exe -y "D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0" -c ".load D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release\runcommand.dll" -Gsins D:\a\_work\1\s\.dotnet-test\x86\dotnet.exe --fx-version 10.0.0-rtm.25476.104 D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0\FindRootsOlderGeneration.dll
Working Directory:
Additional Environment Variables: DOTNET_ROOT=D:\a\_work\1\s\.dotnet-test\x86, DOTNET_ENABLED_SOS_LOGGING=D:\a\_work\1\s\artifacts\TestResults\Release\sos.unittests_2025_10_06_09_09_31_9438\SOS.FindRootsOlderGeneration.projectk.sdk.prebuilt.10.0.0-rtm.25476.104.soslog, DOTNET_EnableWriteXorExecute=0, COMPlus_EnableWriteXorExecute=0, DOTNET_gcServer=1
{
00:00.133:
00:00.133: ************* Preparing the environment for Debugger Extensions Gallery repositories **************
00:00.133: ExtensionRepository : Implicit
00:00.133: UseExperimentalFeatureForNugetShare : true
00:00.133: AllowNugetExeUpdate : true
00:00.133: NonInteractiveNuget : true
00:00.133: AllowNugetMSCredentialProviderInstall : true
00:00.133: AllowParallelInitializationOfLocalRepositories : true
00:00.133:
00:00.133: EnableRedirectToV8JsProvider : false
00:00.133:
00:00.133: -- Configuring repositories
00:00.133: ----> Repository : LocalInstalled, Enabled: true
00:00.133: ----> Repository : UserExtensions, Enabled: true
00:00.133:
00:00.133: >>>>>>>>>>>>> Preparing the environment for Debugger Extensions Gallery repositories completed, duration 0.000 seconds
00:00.133:
00:00.133: ************* Waiting for Debugger Extensions Gallery to Initialize **************
00:00.144:
00:00.144: >>>>>>>>>>>>> Waiting for Debugger Extensions Gallery to Initialize completed, duration 0.015 seconds
00:00.144: ----> Repository : UserExtensions, Enabled: true, Packages count: 0
00:00.144: ----> Repository : LocalInstalled, Enabled: true, Packages count: 0
00:00.144:
00:00.144: Microsoft (R) Windows Debugger Version 10.0.26100.1 X86
00:00.144: Copyright (c) Microsoft Corporation. All rights reserved.
00:00.144:
00:00.144: CommandLine: D:\a\_work\1\s\.dotnet-test\x86\dotnet.exe --fx-version 10.0.0-rtm.25476.104 D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0\FindRootsOlderGeneration.dll
00:00.149: Unable to add extension DLL: ntsdexts
00:00.149: Unable to add extension DLL: uext
00:00.149: Unable to add extension DLL: exts
00:00.150: Unable to add extension DLL: wow64exts
00:00.150:
00:00.150: ************* Path validation summary **************
00:00.150: Response Time (ms) Location
00:00.150: OK D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0
00:00.150: Symbol search path is: D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0
00:00.150: Executable search path is:
00:00.150: ModLoad: 00310000 00334000 dotnet.exe
00:00.151: ModLoad: 775e0000 77789000 ntdll.dll
00:00.154: ModLoad: 77020000 77110000 C:\Windows\SysWOW64\KERNEL32.DLL
00:00.155: ModLoad: 759e0000 75c31000 C:\Windows\SysWOW64\KERNELBASE.dll
00:00.156: ModLoad: 76720000 76833000 C:\Windows\SysWOW64\ucrtbase.dll
00:00.157: (c68.2610): Break instruction exception - code 80000003 (first chance)
00:00.164: eax=00000000 ebx=030cd000 ecx=ab570000 edx=00000000 esi=ffffffff edi=003100f8
00:00.164: eip=77695c51 esp=0337f334 ebp=0337f360 iopl=0 nv up ei pl zr na pe nc
00:00.164: cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
00:00.164: ntdll!LdrInitShimEngineDynamic+0x6b1:
00:00.164: 77695c51 cc int 3
00:00.164: 0:000> cdb: Reading initial command '.load D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release\runcommand.dll'
00:00.164: <END_COMMAND_OUTPUT>
00:00.164: 0:000>
STDIN: 00:00.164: !runcommand sxd dz
00:00.164: <END_COMMAND_OUTPUT>
00:00.164: 0:000>
STDIN: 00:00.165: !runcommand sxd iov
00:00.165: <END_COMMAND_OUTPUT>
00:00.165: 0:000>
STDIN: 00:00.165: !runcommand .extpath D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release
00:00.165: Extension search path is: D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release
00:00.165: <END_COMMAND_OUTPUT>
00:00.165: 0:000>
STDIN: 00:00.165: !runcommand .outmask- 0x244
00:00.165: Client 06703CF8 mask is 1B3
00:00.165: <END_COMMAND_OUTPUT>
00:00.165: 0:000>
STDIN: 00:00.165: !runcommand !sym quiet
00:00.165: quiet mode - symbol prompts off
00:00.165: <END_COMMAND_OUTPUT>
00:00.165: 0:000>
STDIN: 00:00.165: !runcommand .lines
00:00.165: Line number information will be loaded
00:00.166: <END_COMMAND_OUTPUT>
00:00.166: 0:000>
STDIN: 00:00.166: !runcommand dx @Debugger.Settings.EngineInitialization.SecureLoadDotNetExtensions=false
00:00.166: @Debugger.Settings.EngineInitialization.SecureLoadDotNetExtensions=false : false
00:00.166: <END_COMMAND_OUTPUT>
STARTING SCRIPT: D:\a\_work\1\s\src\SOS\SOS.UnitTests\Scripts\FindRootsOlderGeneration.script
%DEBUGGEE_EXE% => D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0\FindRootsOlderGeneration.dll
%DUMP_NAME% => D:\a\_work\1\s\artifacts\tmp\Release\dumps\ProjectK\10.0.0-rtm.25476.104\net10.0\SOS.FindRootsOlderGeneration.Heap.dmp
%DEBUG_ROOT% => D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0
%TEST_NAME% => SOS.FindRootsOlderGeneration
%LOG_PATH% => D:\a\_work\1\s\artifacts\TestResults\Release\sos.unittests_2025_10_06_09_09_31_9438
%LOG_SUFFIX% => projectk.sdk.prebuilt.10.0.0-rtm.25476.104
%SOS_PATH% => D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release\sos.dll
%DESKTOP_RUNTIME_PATH% =>
<DEBUGGEE_EXE> => D:\\a\\_work\\1\\s\\artifacts\\bin\\FindRootsOlderGeneration\\Release\\net10.0\\FindRootsOlderGeneration.dll
<DEBUG_ROOT> => D:\\a\\_work\\1\\s\\artifacts\\bin\\FindRootsOlderGeneration\\Release\\net10.0
<SOURCE_PATH> => D:\\a\\_work\\1\\s\\src\\SOS\\SOS.UnitTests\\Debuggees\\FindRootsOlderGeneration
<HEXVAL> => [A-Fa-f0-9]+(`[A-Fa-f0-9]+)?
<DECVAL> => [,0-9]+(`[,0-9]+)?
CDB
WINDOWS
PROJECTK
X86
MAJOR_RUNTIME_VERSION_10
MAJOR_RUNTIME_VERSION_GE_3
MAJOR_RUNTIME_VERSION_GE_5
MAJOR_RUNTIME_VERSION_GE_6
MAJOR_RUNTIME_VERSION_GE_7
MAJOR_RUNTIME_VERSION_GE_8
MAJOR_RUNTIME_VERSION_GE_9
LIVE
32BIT
NETCORE_OR_DOTNETDUMP
00:00.166: 0:000>
STDIN: 00:00.166: g
00:00.171: ModLoad: 6f760000 6f7ad000 D:\a\_work\1\s\.dotnet-test\x86\host\fxr\10.0.0-rtm.25476.104\hostfxr.dll
00:00.171: ModLoad: 75430000 754ae000 C:\Windows\SysWOW64\ADVAPI32.dll
00:00.171: ModLoad: 77110000 771d2000 C:\Windows\SysWOW64\msvcrt.dll
00:00.172: ModLoad: 761f0000 7626d000 C:\Windows\SysWOW64\sechost.dll
00:00.172: ModLoad: 76610000 76629000 C:\Windows\SysWOW64\bcrypt.dll
00:00.172: ModLoad: 76390000 7644c000 C:\Windows\SysWOW64\RPCRT4.dll
00:00.175: ModLoad: 6f710000 6f75f000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\hostpolicy.dll
00:00.186: ModLoad: 69960000 69d1a000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\coreclr.dll
00:00.186: ModLoad: 75550000 7563a000 C:\Windows\SysWOW64\ole32.dll
00:00.187: ModLoad: 77490000 7750e000 C:\Windows\SysWOW64\msvcp_win.dll
00:00.187: ModLoad: 772f0000 77314000 C:\Windows\SysWOW64\GDI32.dll
00:00.187: ModLoad: 75cc0000 75cda000 C:\Windows\SysWOW64\win32u.dll
00:00.187: ModLoad: 771e0000 772c9000 C:\Windows\SysWOW64\gdi32full.dll
00:00.188: ModLoad: 76e70000 77015000 C:\Windows\SysWOW64\USER32.dll
00:00.188: ModLoad: 75750000 759d7000 C:\Windows\SysWOW64\combase.dll
00:00.189: ModLoad: 764e0000 7657d000 C:\Windows\SysWOW64\OLEAUT32.dll
00:00.190: ModLoad: 754b0000 754d5000 C:\Windows\SysWOW64\IMM32.DLL
00:00.204: ModLoad: 76120000 76185000 C:\Windows\SysWOW64\bcryptPrimitives.dll
00:00.207: (c68.2610): Unknown exception - code 04242420 (first chance)
00:00.209: ModLoad: 752c0000 752d2000 C:\Windows\SysWOW64\kernel.appcore.dll
00:00.213: ModLoad: 68a80000 6995f000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\System.Private.CoreLib.dll
00:00.240: ModLoad: 27170000 27178000 D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0\FindRootsOlderGeneration.dll
00:00.241: ModLoad: 27170000 27178000 D:\a\_work\1\s\artifacts\bin\FindRootsOlderGeneration\Release\net10.0\FindRootsOlderGeneration.dll
00:00.241: ModLoad: 26fb0000 26fbe000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\System.Runtime.dll
00:00.242: ModLoad: 26fb0000 26fbe000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\System.Runtime.dll
00:00.242: ModLoad: 6f480000 6f63b000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\clrjit.dll
00:00.243: ModLoad: 6f6b0000 6f6d4000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\System.Console.dll
00:00.244: (c68.2610): Break instruction exception - code 80000003 (first chance)
00:00.251: eax=00000001 ebx=0337efb4 ecx=00000008 edx=03719638 esi=03766038 edi=0337efb4
00:00.251: eip=75b87f12 esp=0337ee70 ebp=0337eea0 iopl=0 nv up ei pl nz na po nc
00:00.251: cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
00:00.251: KERNELBASE!DebugBreak+0x2:
00:00.251: 75b87f12 cc int 3
00:00.251: <END_COMMAND_OUTPUT>
00:00.251: 0:000>
STDIN: 00:00.251: !runcommand .unload sos
00:00.251: No extension named 'sos' in chain
00:00.251: <END_COMMAND_OUTPUT>
00:00.251: 0:000>
STDIN: 00:00.251: !runcommand .load D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release\sos.dll
00:00.252: <END_COMMAND_OUTPUT>
00:00.252: 0:000>
STDIN: 00:00.252: !runcommand .reload
00:00.252: Reloading current modules
00:00.253: .............................
00:00.265:
00:00.265: ************* Symbol Loading Error Summary **************
00:00.265: Module name Error
00:00.265: System.Private.CoreLib The system cannot find the file specified
00:00.265: KERNELBASE The system cannot find the file specified
00:00.265: ntdll The system cannot find the file specified
00:00.265:
00:00.265: You can troubleshoot most symbol related issues by turning on symbol loading diagnostics (!sym noisy) and repeating the command that caused symbols to be loaded.
00:00.265: You should also verify that your symbol search path (.sympath) is correct.
00:00.265: <END_COMMAND_OUTPUT>
00:00.265: 0:000>
STDIN: 00:00.265: !runcommand .chain
00:00.266: Extension DLL search Path:
00:00.266: D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release
00:00.266: Extension DLL chain:
00:00.266: D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release\sos.dll: image 9,0,13,603 @Commit: f40e210, API 2.0.0, built Mon Oct 6 21:02:28 2025
00:00.266: [path: D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release\sos.dll]
00:00.266: D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release\runcommand.dll: API 1.0.0, built Mon Oct 6 21:02:23 2025
00:00.266: [path: D:\a\_work\1\s\artifacts\bin\Windows_NT.x86.Release\runcommand.dll]
00:00.266: dbghelp: image 10.0.26100.1, API 10.0.6,
00:00.266: [path: D:\a\_work\1\s\.packages\cdb-sos\10.0.26100.1\runtimes\win-x86\native\dbghelp.dll]
00:00.266: <END_COMMAND_OUTPUT>
00:00.266: 0:000>
STDIN: 00:00.266: !runcommand !SetHostRuntime D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104
00:00.266: Using .NET Core runtime (version 10.0) to host the managed SOS code
00:00.266: Host runtime path: D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104
00:00.266: <END_COMMAND_OUTPUT>
00:00.266: 0:000>
STDIN: 00:00.266: g
00:00.269: ModLoad: 6fa50000 6fa61000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\System.Threading.dll
00:00.270: ModLoad: 26fe0000 26fe8000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\System.Text.Encoding.Extensions.dll
00:00.270: ModLoad: 26fe0000 26fe8000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\System.Text.Encoding.Extensions.dll
00:00.271: ModLoad: 6f640000 6f658000 D:\a\_work\1\s\.dotnet-test\x86\shared\Microsoft.NETCore.App\10.0.0-rtm.25476.104\System.Runtime.InteropServices.dll
00:00.273: Enable CLRN notifications: SXE CLRN
00:00.273: (c68.2610): Break instruction exception - code 80000003 (first chance)
00:00.274: eax=00000001 ebx=0337efb4 ecx=00000008 edx=03719638 esi=03766038 edi=0337efb4
00:00.274: eip=75b87f12 esp=0337ee70 ebp=0337eea0 iopl=0 nv up ei pl nz na po nc
00:00.274: cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
00:00.274: KERNELBASE!DebugBreak+0x2:
00:00.274: 75b87f12 cc int 3
00:00.274: <END_COMMAND_OUTPUT>
00:00.274: 0:000>
STDIN: 00:00.274: !runcommand !FindRoots -gen any
00:00.519: <END_COMMAND_OUTPUT>
00:00.519: 0:000>
STDIN: 00:00.519: !runcommand sxe CLRN
00:00.519: <END_COMMAND_OUTPUT>
00:00.519: 0:000>
STDIN: 00:00.519: g
00:00.521: Before GC - Array Gen: 2, Thing Gen: 0
00:00.521: Forcing GC...
00:00.522: (c68.12a4): CLR notification exception - code e0444143 (first chance)
00:00.529: CLR notification: GC - Performing a gen 0 collection. Determined surviving objects...
00:00.529: First chance exceptions are reported before any exception handling.
00:00.529: This exception may be expected and handled.
00:00.530: eax=0577f670 ebx=69cea834 ecx=00000003 edx=00000000 esi=00000003 edi=0577f73c
00:00.530: eip=75b195f2 esp=0577f670 ebp=0577f6c8 iopl=0 nv up ei pl nz ac po nc
00:00.530: cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000212
00:00.530: KERNELBASE!RaiseException+0x62:
00:00.530: 75b195f2 8b4c2454 mov ecx,dword ptr [esp+54h] ss:002b:0577f6c4=323253bd
00:00.530: <END_COMMAND_OUTPUT>
00:00.530: 0:007>
STDIN: 00:00.530: !runcommand !clrstack -all
00:00.537: OS Thread Id: 0x2740
00:00.545: Child SP IP Call Site
00:00.545: 05ABFB08 77653e8c [DebuggerU2MCatchHandlerFrame: 05abfb08]
00:00.545: OS Thread Id: 0x2610
00:00.545: Child SP IP Call Site
00:00.545: 0337EE84 77653e8c [InlinedCallFrame: 0337ee84]
00:00.546: 0337EE84 68cec380 [InlinedCallFrame: 0337ee84]
00:00.546: 0337EE78 68CEC380 System.GC.Collect(Int32, System.GCCollectionMode, Boolean, Boolean, Boolean)
00:00.559: 0337EED4 68CEC2B2 System.GC.Collect(Int32, System.GCCollectionMode, Boolean)
00:00.560: 0337EEE8 26F7195E FindRootsOlderGeneration.Program.Main() [/_/src/SOS/SOS.UnitTests/Debuggees/FindRootsOlderGeneration/Program.cs @ 36]
00:00.564: OS Thread Id: 0x195c
00:00.564: Child SP IP Call Site
00:00.564: 26F6F880 776541ac [DebuggerU2MCatchHandlerFrame: 26f6f880]
00:00.564: <END_COMMAND_OUTPUT>
00:00.564: 0:007>
STDIN: 00:00.564: ~0s
00:00.565: eax=00000001 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000 edi=000002a8
00:00.565: eip=77653e8c esp=0337ed30 ebp=0337eda0 iopl=0 nv up ei pl nz ac pe nc
00:00.565: cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000216
00:00.565: ntdll!NtWaitForSingleObject+0xc:
00:00.565: 77653e8c c20c00 ret 0Ch
00:00.565: <END_COMMAND_OUTPUT>
00:00.565: 0:000>
STDIN: 00:00.565: !runcommand !DumpStackObjects
00:00.632: OS Thread Id: 0x2610 (0)
00:00.637: SP/REG Object Name
00:00.686: 0337eef4 05b5812c System.String
00:00.694: 0337ef00 19ac1020 FindRootsOlderGeneration.Thing[]
00:00.694: 0337ef3c 05b576fc FindRootsOlderGeneration.Thing
00:00.694: 0337ef40 19ac1020 FindRootsOlderGeneration.Thing[]
00:00.695: 0337f264 11acbed0 System.String[]
00:00.695: 0337f2f4 11acbed0 System.String[]
00:00.696: 0337f2f8 11acbee0 System.String[]
00:00.696: 0337f308 11acbed0 System.String[]
00:00.696: 0337f438 11acbee0 System.String[]
00:00.696: <END_COMMAND_OUTPUT>
00:00.696: 0:000>
STDIN: 00:00.696: !runcommand !FindRoots 05b576fc
00:00.740: Older Generation:
00:00.740: 19ac1020
00:00.745: Caching GC roots, this may take a while.
00:00.745: Subsequent runs of this command will be faster.
00:00.745:
00:00.751: -> 19ac1020 FindRootsOlderGeneration.Thing[]
00:00.751: -> 05b576fc FindRootsOlderGeneration.Thing
00:00.751:
00:00.751: Older Generation:
00:00.751: 19ac1020
00:00.751: -> 19ac1020 FindRootsOlderGeneration.Thing[]
00:00.751: -> 05b576fc FindRootsOlderGeneration.Thing
00:00.751:
00:00.763: Found 2 unique roots.
00:00.763: <END_COMMAND_OUTPUT>
SOSRunner error at D:\a\_work\1\s\src\SOS\SOS.UnitTests\Scripts\FindRootsOlderGeneration.script:34
Excerpt from D:\a\_work\1\s\src\SOS\SOS.UnitTests\Scripts\FindRootsOlderGeneration.script:
32
33 SOSCOMMAND:FindRoots <POUT>\w+\s+(<HEXVAL>)\s+(FindRootsOlderGeneration.Thing)(?!\[\])<POUT>
34 VERIFY:Found 1 unique roots.
35
36 COMMAND:sxn CLRN
00:00.763: 0:000> <END_COMMAND_ERROR>
STDIN: 00:00.763: !runcommand !SOSStatus
System.Exception: Debugger output did not match the expression: Found 1 unique roots.
at SOSRunner.VerifyOutput(String verifyLine, Boolean match) in /_/src/SOS/SOS.UnitTests/SOSRunner.cs:line 1252
at SOSRunner.RunScript(String scriptRelativePath) in /_/src/SOS/SOS.UnitTests/SOSRunner.cs:line 905
at SOSRunner.RunScript(String scriptRelativePath) in /_/src/SOS/SOS.UnitTests/SOSRunner.cs:line 942
Killing process 9104: 00:00.773 - Kill() was called
}
```
The api.nuget.org source will clash with the CFSClean network isolation policy and the same data is provided by AzDO now.
Updates repository to use `Microsoft.Build.Traversal` `.proj` files to drive which projects are built. Previously the arcade build infrastructure would build the solution files found in the root directly. This approach gives us more fine-grained control over projects to build, as well as allow us to automatically generate a solution file using `slngen`. I have checked in the generated `build.sln` which can be loaded with `VS` or `VSCode`. This version includes the `vcxproj` files which improve the native debug experience in VS. There is an option to generate `build.sln` without these files as they can cause warnings on non-Windows platforms (same behavior as today). For convienence I have added two new scripts: * `eng/generate-sln.ps1` * `eng/generate-sln.sh` both of these automatically invoke the proper commands to regenerate the `build.sln` file. I updated the instruction docs to reference `build.sln` and explain how to regenerate it. Edit: * I have reverted from using `slnx -> sln` as the conversion process causes some problems with the vcxproj Ids. Given that these are now auto-generated, using the `sln` format seems acceptable as it has broader support.
* moved the dotnet install from root to `/artifacts/dotnet-test` which can be packaged and sent up to helix
- Use file-based app to generate manifests for SOS packages - Generate both regular and uncompressed manifest formats
- [x] Understand the repository structure and context - [x] Create AGENTS.md file with standard guidance for AI agents - [x] Include repository-specific information (build, test, architecture) - [x] Include coding standards and conventions - [x] Include testing guidelines - [x] Verify the file is properly formatted and complete - [x] Update build options to use single dash for consistency - [x] Merge EditorConfig section with C# Code Style section - [x] Add Development Workflow section - [x] Remove .NET Runtime Repository link from Resources - [x] Refine guidance on making changes to balance minimal changes with code clarity <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>Create AGENTS.md</issue_title> > <issue_description>As we use copilot more we won't want to repeat the same general guidance again and again on every PR. Instead we should have an AGENTS.md file that provides this standard information in a reusable form.</issue_description> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > </comments> > </details> Fixes #5608 <!-- START COPILOT CODING AGENT TIPS --> --- ✨ Let Copilot coding agent [set things up for you](https://github.com/dotnet/diagnostics/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: noahfalk <6243776+noahfalk@users.noreply.github.com> Co-authored-by: hoyosjs <19413848+hoyosjs@users.noreply.github.com>
Implements dotnet/docs#47894 Following the addition of emitting native runtime and custom EventSource events as user_events through dotnet/runtime#115265 and the public release of https://github.com/microsoft/one-collect which supports collecting both .NET user_events and Linux perf events into a single .nettrace file, `dotnet-trace` will support a new verb, `collect-linux`, that wraps around `record-trace`. This PR does the following: - Adds `collect-linux` verb and serializes a subset of `dotnet-trace collect` options in addition to a `collect-linux` specific `--perf-events` option into `record-trace` args. (see dotnet/docs#47894 for overarching details) - Adds record-trace dynamic library to `dotnet-trace` - Updates existing profiles (`cpu-sampling` -> `dotnet-common` + `dotnet-sampled-thread-time`) and adds `collect-linux` specific profiles - Updates `list-profiles` verb with revamped profiles + multiline description formatting - Refactors `EventPipeProvider` composition logic (`MergeProfileAndProviders` + `ToProviders` -> `ComputeProviderConfig`) and rename `Extensions.cs` -> `ProviderUtils.cs` - Revamp EventPipeProvider composition tests (`ProviderParsing.cs` -> `ProviderCompositionTests.cs`) - Various cleanup: Update CLREventKeywords + Update logging + refactor `collect` logic + expand `dotnet-trace` common options ## Testing ### dotnet-trace collect-linux On Linux <details> <summary>collect-linux</summary> <details> <summary>collect-linux --help</summary> ```bash $ ./dotnet-trace collect-linux -h Description: Collects diagnostic traces using perf_events, a Linux OS technology. collect-linux requires admin privileges to capture kernel- and user-mode events, and by default, captures events from all processes. This Linux-only command includes the same .NET events as dotnet-trace collect, and it uses the kernel’s user_events mechanism to emit .NET events as perf events, enabling unification of user-space .NET events with kernel-space system events. Usage: dotnet-trace collect-linux [options] Options: --providers A comma delimited list of EventPipe providers to be enabled. This is in the form 'Provider[,Provider]',where Provider is in the form: 'KnownProviderName[:[Flags][:[Level][:[KeyValueArgs]]]]', and KeyValueArgs is in the form: '[key1=value1][;key2=value2]'. Values in KeyValueArgs that contain ';' or '=' characters need to be surrounded by '"', e.g., FilterAndPayloadSpecs="MyProvider/MyEvent:-Prop1=Prop1;Prop2=Prop2.A.B;". Depending on your shell, you may need to escape the '"' characters and/or surround the entire provider specification in quotes, e.g., --providers 'KnownProviderName:0x1:1:FilterSpec=\"KnownProviderName/EventName:-Prop1=Prop1;Prop2=Prop2.A.B;\"'. These providers are in addition to any providers implied by the --profile argument. If there is any discrepancy for a particular provider, the configuration here takes precedence over the implicit configuration from the profile. See documentation for examples. --clreventlevel Verbosity of CLR events to be emitted. --clrevents List of CLR runtime events to emit. --perf-events Comma-separated list of perf events (e.g. syscalls:sys_enter_execve,sched:sched_switch). --profile A named, pre-defined set of provider configurations for common tracing scenarios. You can specify multiple profiles as a comma-separated list. When multiple profiles are specified, the providers and settings are combined (union), and duplicates are ignored. -o, --output The output path for the collected trace data. If not specified it defaults to '<appname>_<yyyyMMdd>_<HHmmss>.nettrace', e.g., 'myapp_20210315_111514.nettrace'. [default: default] --duration When specified, will trace for the given timespan and then automatically stop the trace. Provided in the form of dd:hh:mm:ss. -?, -h, --help Show help and usage information ``` </details> <details> <summary>`collect-linux` without elevated privileges</summary> ```bash $ ./dotnet-trace collect-linux ========================================================================================== The collect-linux verb is in preview. Some usage scenarios may not yet be supported, and some trace parsers may not yet support NetTrace V6. For any bugs or unexpected behaviors, please open an issue at https://github.com/dotnet/diagnostics/issues. ========================================================================================== No providers, profiles, ClrEvents, or PerfEvents were specified, defaulting to trace profiles 'dotnet-common' + 'cpu-sampling'. Provider Name Keywords Level Enabled By Microsoft-Windows-DotNETRuntime 0x000000100003801D Informational(4) --profile Linux Perf Events Enabled By cpu-sampling --profile Output File : /home/mihw/repo/diagnostics/trace_20251022_152234.nettrace Error: Tracefs is not accessible: Permission denied (os error 13) ``` </details> <details> <summary>`collect-linux` with elevated privileges</summary> ```bash $ sudo ./dotnet-trace collect-linux ========================================================================================== The collect-linux verb is in preview. Some usage scenarios may not yet be supported, and some trace parsers may not yet support NetTrace V6. For any bugs or unexpected behaviors, please open an issue at https://github.com/dotnet/diagnostics/issues. ========================================================================================== No providers, profiles, ClrEvents, or PerfEvents were specified, defaulting to trace profiles 'dotnet-common' + 'cpu-sampling'. Provider Name Keywords Level Enabled By Microsoft-Windows-DotNETRuntime 0x000000100003801D Informational(4) --profile Linux Perf Events Enabled By cpu-sampling --profile Output File : /home/mihw/repo/diagnostics/trace_20251022_152124.nettrace [00:00:00:21] Recording trace. Press <Enter> or <Ctrl-C> to exit... Recording stopped. Resolving symbols. Finished recording trace. Trace written to /home/mihw/repo/diagnostics/trace_20251022_152124.nettrace ``` </details> </details> On Windows (and I presume other non-Linux OS): <details> <summary>`collect-linux`</summary> ```pwsh .\artifacts\bin\dotnet-trace\Debug\net8.0\dotnet-trace.exe collect-linux The collect-linux command is only supported on Linux. ``` </details> ### dotnet-trace list-profiles <details> <summary>`list-profiles`</summary> ```bash dotnet-trace profiles: dotnet-common - Lightweight .NET runtime diagnostics designed to stay low overhead. Includes GC, AssemblyLoader, Loader, JIT, Exceptions, Threading, JittedMethodILToNativeMap, and Compilation events Equivalent to --providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4". dotnet-sampled-thread-time (collect) - Samples .NET thread stacks (~100 Hz) toestimate how much wall clock time code is using. gc-verbose - Tracks GC collections and samples object allocations. gc-collect - Tracks GC collections only at very low overhead. database - Captures ADO.NET and Entity Framework database commands cpu-sampling (collect-linux) - Kernel CPU sampling events for measuring CPU usage. thread-time (collect-linux) - Kernel thread context switch events for measuring CPU usage and wall clock time ``` </details> <img width="215" height="172" alt="Screenshot 2025-09-19 142848" src="https://github.com/user-attachments/assets/9229b2f0-92fa-4c87-89e7-505c55f7ae6a" /> <img width="730" height="1049" alt="Screenshot 2025-09-19 142945" src="https://github.com/user-attachments/assets/4be3f222-0495-4f93-979c-43d68cd5f964" /> <img width="1903" height="823" alt="Screenshot 2025-09-19 142858" src="https://github.com/user-attachments/assets/370648f8-a5b5-436e-a9dc-73bffa0b2ad4" />
Updated comments and compile options for signed overflow and strict aliasing. See related code for dotnet/runtime - dotnet/runtime#120775
Fixes librecordtrace.so not being packed into the official build of dotnet-trace.
The RecordTrace FFI callback can be invoked on the magnitude of several thousands of times every second. Updating the progress status is too aggressive, and caused all of the events to be dropped. Instead, updating the progress status every second 1. actually leads to a different elapsed time and 2. allows adequate event throughput.
…ach (#5616) This modifies the `crashinfo` command to only load if the ICrashInfoModuleService loads, which means that the data target is a dump either hosted by a debugger or dotnet-dump. The EntryPoint module on windows might not be the first module loaded, so it will locate the first module that has an EXE file extension.
`ErrorCodes` in dotnet-trace and `ReturnCode` in Common are redundant. `ReturnCode` is the established standard across diagnostic tools (dotnet-trace, dotnet-counters) and provides better type safety as an enum. `ErrorCodes` existed only for legacy ConvertCommand usage. ## Changes - **ConvertCommand.cs**: Migrated from `ErrorCodes` to `ReturnCode` - Added `using Microsoft.Internal.Common.Utils` - Replaced `ErrorCodes.ArgumentError` → `(int)ReturnCode.ArgumentError` - Replaced `ErrorCodes.UnknownError` → `(int)ReturnCode.UnknownError` - **ErrorCode.cs**: Removed completely - No longer needed as ConvertCommand now uses ReturnCode directly ```diff - return ErrorCodes.ArgumentError; + return (int)ReturnCode.ArgumentError; ``` This standardizes error code handling across all diagnostic tools. ## Testing - ✅ Build succeeded with 0 warnings, 0 errors - ✅ All 109 dotnet-trace unit tests passed <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > Can you assess the history of `ErrorCode` in `src/Tools/dotnet-trace/CommandLine/Commands/ErrorCode.cs` and `ReturnCode` in `src/Tools/Common/Commands/Utils.cs`. Can you assess whether they are overlapping in responsibility, and if so, can you deprecate ErrorCode in favor of ReturnCode? </details> <!-- START COPILOT CODING AGENT TIPS --> --- ✨ Let Copilot coding agent [set things up for you](https://github.com/dotnet/diagnostics/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: mdh1418 <16830051+mdh1418@users.noreply.github.com>
Co-authored-by: Noah Falk <noahfalk@users.noreply.github.com>
With microsoft/one-collect#209, we can now allow specifying a particular process to be traced.
#5619 didn't work. This time I tested these changes on the official build pipeline, and the BundledTools + .nupkg both worked on my linux-x64 WSL instance. --------- Co-authored-by: Juan Sebastian Hoyos Ayala <juan.s.hoyos@outlook.com>
Not all supported RIDs will be compatible with RecordTrace, which currently has a minimum requirement of glibc 2.34. So users running `dotnet-trace collect-linux` in older distros will be unable to p/invoke `librecordtrace.so` even though they are running on Linux x64/arm64.
RecordTrace does not build for musl platforms at this time.
With more tests validating output of diagnostic tools, errors from CommandUtils helpers should be validated as well. In facilitating error checking, `src/Tools/Common/Commands/Utils.cs` has been refactored to break unnecessary dependencies (e.g. using `CommandUtils.FindProcessIdWithName` requires adding `IConsole.cs` to project Compile items because `LineRewriter` depends on `IConsole`, regardless of whether LineRewriter is used) This PR does the following: - Switch CounterMonitor back to using IConsole for output instead of TextWriters (see commit message for more details #5217 had switched from IConsole to TextWriters) - Rename CommandLineErrorException -> DiagnosticToolException to suggest a more generic invalid usage of diagnostic tools, rather specifically a command line exception. - Update `CommandUtils` helpers to throw DiagnosticToolException to allow callers to decide how to handle the message. - Extend DiagnosticToolException (formerly CommandLineErrorException) to specify ReturnCode - Break ReturnCode + LineRewriter out of Utils.cs to have discrete dependency chains for Project compile items. - Rename Utils.cs -> CommandUtils.cs - Keep `src/Tools/Common/Commands` command-only
This pull request updates the following dependencies [marker]: <> (Begin:9c7d85bb-274e-4ad6-970a-48ffc448929b) ## From https://github.com/dotnet/dotnet - **Subscription**: [9c7d85bb-274e-4ad6-970a-48ffc448929b](https://maestro.dot.net/subscriptions?search=9c7d85bb-274e-4ad6-970a-48ffc448929b) - **Build**: [20251020.17](https://dev.azure.com/dnceng/internal/_build/results?buildId=2820987) ([287966](https://maestro.dot.net/channel/5173/github:dotnet:dotnet/build/287966)) - **Date Produced**: October 21, 2025 12:07:46 PM UTC - **Commit**: [50d79701f2d748e965fefb4ba42580368598b9cc](dotnet/dotnet@50d7970) - **Branch**: [release/10.0.1xx](https://github.com/dotnet/dotnet/tree/release/10.0.1xx) [DependencyUpdate]: <> (Begin) - **Updates**: - From [10.0.0-rtm.25476.104 to 10.0.0-rtm.25520.117][13] - runtime.linux-arm64.Microsoft.DotNet.Cdac.Transport - runtime.linux-x64.Microsoft.DotNet.Cdac.Transport - runtime.osx-arm64.Microsoft.DotNet.Cdac.Transport - runtime.osx-x64.Microsoft.DotNet.Cdac.Transport - runtime.win-arm64.Microsoft.DotNet.Cdac.Transport - Microsoft.AspNetCore.App.Ref.Internal - Microsoft.NETCore.Platforms - runtime.win-x64.Microsoft.DotNet.Cdac.Transport - From [10.0.0-rtm.25476.104 to 10.0.0][13] - Microsoft.AspNetCore.App.Ref - Microsoft.NETCore.App.Ref - From [5.0.0-2.25476.104 to 5.0.0-2.25520.117][13] - Microsoft.CodeAnalysis - Microsoft.CodeAnalysis.Analyzers - Microsoft.CodeAnalysis.CSharp - From [10.0.100-rtm.25476.104 to 10.0.100][13] - Microsoft.CodeAnalysis.NetAnalyzers - From [10.0.0-beta.25476.104 to 10.0.0-beta.25520.117][13] - Microsoft.DotNet.Arcade.Sdk - Microsoft.DotNet.CodeAnalysis - From [10.0.100-rtm.25476.104 to 10.0.100-rtm.25520.117][13] - Microsoft.NET.Sdk [13]: dotnet/dotnet@e1eaf1b...50d7970 [DependencyUpdate]: <> (End) - **Updates to .NET SDKs in root:** - Updates sdk.version to 10.0.100-rc.1.25451.107 - Updates tools.dotnet to 10.0.100-rc.1.25451.107 [marker]: <> (End:9c7d85bb-274e-4ad6-970a-48ffc448929b) --------- Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: Juan Hoyos <19413848+hoyosjs@users.noreply.github.com>
As functional test cases increase, validating unsupported behavior becomes more redundant. Instead, leverage ConditionalFact and ConditionalTheory attributes from Microsoft.DotNet.XUnitExtensions https://github.com/dotnet/arcade/tree/main/src/Microsoft.DotNet.XUnitExtensions.Shared/Attributes to simplify test logic.
Now that #5622 enables redirecting exception messages from CommandUtils, add corresponding tests to dotnet-trace functional tests.
Disable AzDO dependabot.
This pull request updates the following dependencies [marker]: <> (Begin:9c7d85bb-274e-4ad6-970a-48ffc448929b) ## From https://github.com/dotnet/dotnet - **Subscription**: [9c7d85bb-274e-4ad6-970a-48ffc448929b](https://maestro.dot.net/subscriptions?search=9c7d85bb-274e-4ad6-970a-48ffc448929b) - **Build**: [20251201.10](https://dev.azure.com/dnceng/internal/_build/results?buildId=2851609) ([292938](https://maestro.dot.net/channel/5173/github:dotnet:dotnet/build/292938)) - **Date Produced**: December 2, 2025 10:42:42 AM UTC - **Commit**: [7dedd35363daf74f94a980da38f2cf4dc86cc23a](dotnet/dotnet@7dedd35) - **Branch**: [release/10.0.1xx](https://github.com/dotnet/dotnet/tree/release/10.0.1xx) [DependencyUpdate]: <> (Begin) - **Dependency Updates**: - From [10.0.2-servicing.25601.102 to 10.0.2-servicing.25601.110][1] - runtime.linux-arm64.Microsoft.DotNet.Cdac.Transport - runtime.linux-x64.Microsoft.DotNet.Cdac.Transport - runtime.osx-arm64.Microsoft.DotNet.Cdac.Transport - runtime.osx-x64.Microsoft.DotNet.Cdac.Transport - runtime.win-arm64.Microsoft.DotNet.Cdac.Transport - Microsoft.AspNetCore.App.Ref.Internal - Microsoft.NETCore.Platforms - runtime.win-x64.Microsoft.DotNet.Cdac.Transport - From [10.0.2 to 10.0.2][1] - Microsoft.AspNetCore.App.Ref - Microsoft.NETCore.App.Ref - From [5.0.0-2.25601.102 to 5.0.0-2.25601.110][1] - Microsoft.CodeAnalysis - Microsoft.CodeAnalysis.Analyzers - Microsoft.CodeAnalysis.CSharp - From [10.0.102 to 10.0.102][1] - Microsoft.CodeAnalysis.NetAnalyzers - From [10.0.0-beta.25601.102 to 10.0.0-beta.25601.110][1] - Microsoft.DotNet.Arcade.Sdk - Microsoft.DotNet.CodeAnalysis - From [10.0.102-servicing.25601.102 to 10.0.102-servicing.25601.110][1] - Microsoft.NET.Sdk [1]: dotnet/dotnet@f2d1a92...7dedd35 [DependencyUpdate]: <> (End) [marker]: <> (End:9c7d85bb-274e-4ad6-970a-48ffc448929b) Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
* Fixes intermittent failures when using the cDAC * Prepares SOS to consume NativeAOT packages
This brings us closer to sending the tests to helix
This pull request updates the following dependencies [marker]: <> (Begin:9c7d85bb-274e-4ad6-970a-48ffc448929b) ## From https://github.com/dotnet/dotnet - **Subscription**: [9c7d85bb-274e-4ad6-970a-48ffc448929b](https://maestro.dot.net/subscriptions?search=9c7d85bb-274e-4ad6-970a-48ffc448929b) - **Build**: [20251203.3](https://dev.azure.com/dnceng/internal/_build/results?buildId=2852778) ([293194](https://maestro.dot.net/channel/5173/github:dotnet:dotnet/build/293194)) - **Date Produced**: December 3, 2025 7:24:47 PM UTC - **Commit**: [5ddd0ddc0ebadca21645a05c419ed5a034454605](dotnet/dotnet@5ddd0dd) - **Branch**: [release/10.0.1xx](https://github.com/dotnet/dotnet/tree/release/10.0.1xx) [DependencyUpdate]: <> (Begin) - **Dependency Updates**: - From [10.0.2-servicing.25601.110 to 10.0.2-servicing.25603.103][1] - runtime.linux-arm64.Microsoft.DotNet.Cdac.Transport - runtime.linux-x64.Microsoft.DotNet.Cdac.Transport - runtime.osx-arm64.Microsoft.DotNet.Cdac.Transport - runtime.osx-x64.Microsoft.DotNet.Cdac.Transport - runtime.win-arm64.Microsoft.DotNet.Cdac.Transport - Microsoft.AspNetCore.App.Ref.Internal - Microsoft.NETCore.Platforms - runtime.win-x64.Microsoft.DotNet.Cdac.Transport - From [10.0.2 to 10.0.2][1] - Microsoft.AspNetCore.App.Ref - Microsoft.NETCore.App.Ref - From [5.0.0-2.25601.110 to 5.0.0-2.25603.103][1] - Microsoft.CodeAnalysis - Microsoft.CodeAnalysis.Analyzers - Microsoft.CodeAnalysis.CSharp - From [10.0.102 to 10.0.102][1] - Microsoft.CodeAnalysis.NetAnalyzers - From [10.0.0-beta.25601.110 to 10.0.0-beta.25603.103][1] - Microsoft.DotNet.Arcade.Sdk - Microsoft.DotNet.CodeAnalysis - From [10.0.102-servicing.25601.110 to 10.0.102-servicing.25603.103][1] - Microsoft.NET.Sdk [1]: dotnet/dotnet@7dedd35...5ddd0dd [DependencyUpdate]: <> (End) [marker]: <> (End:9c7d85bb-274e-4ad6-970a-48ffc448929b) Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
## Adds * MSBuild property: `$(SrcDir) -> $(RepoRoot)/src/` * MSBuild property: `$(TestDir) -> $(ReporRoot/src/tests/` ## Modifies * Tests `.csproj` files to use these properties to simplify imports. This also allows us to move around the test/src directories without modifying each project individually. * `Microsoft.FileFormats.UnitTests.csproj` and `Microsoft.SymbolStore.UnitTests.csproj` both copy test binary assets from the source tree into the artifacts tree. This was handled individually for each item with some inconsistencies. I simplified this process using globbing. There are a couple more files that are copied now, but I believe this shouldn't have any appreciable impact.
* Adds SOS test for minidump local var lookup
* Moves `runcommand` and `DesktopClrHost` from under the SOS package to `src/tests/`
linux-x64 build with clang-21 fails with below error. ``` [ 248s] In file included from /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/SOS/Strike/disasm.cpp:57: [ 248s] In file included from /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/shared/gcdump/gcdumpnonx86.cpp:13: [ 248s] In file included from /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/shared/inc/gcinfodecoder.h:170: [ 248s] /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/shared/inc/regdisp.h:261:16: error: first argument in call to 'memset' is a pointer to non-trivially copyable type 'REGDISPLAY' [-Werror,-Wnontrivial-memcall] [ 248s] 261 | memset(this, 0, sizeof(REGDISPLAY)); [ 248s] | ^ [ 248s] /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/shared/inc/regdisp.h:261:16: note: explicitly cast the pointer to silence this warning [ 248s] 261 | memset(this, 0, sizeof(REGDISPLAY)); [ 248s] | ^ [ 248s] | (void*) [ 248s] In file included from /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/SOS/Strike/disasm.cpp:57: [ 248s] In file included from /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/shared/gcdump/gcdumpnonx86.cpp:591: [ 248s] /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/shared/gcdump/../gcinfo/gcinfodumper.cpp:620:16: error: first argument in call to 'memset' is a pointer to non-trivially copyable type 'REGDISPLAY' [-Werror,-Wnontrivial-memcall] [ 248s] 620 | ZeroMemory(®disp, sizeof(regdisp)); [ 248s] | ^ [ 248s] /home/abuild/rpmbuild/BUILD/coreclr-diagnostics-8.0.547301/src/shared/gcdump/../gcinfo/gcinfodumper.cpp:620:16: note: explicitly cast the pointer to silence this warning [ 248s] 2 errors generated. [ 248s] make[2]: *** [src/SOS/Strike/CMakeFiles/sos.dir/build.make:79: src/SOS/Strike/CMakeFiles/sos.dir/disasm.cpp.o] Error 1 [ 248s] make[2]: *** Waiting for unfinished jobs.... [ 248s] [ 99%] Linking CXX shared library libdbgshim.so [ 248s] [ 99%] Built target dbgshim [ 249s] [ 99%] Linking CXX shared library libsosplugin.so [ 249s] [ 99%] Built target sosplugin [ 250s] make[1]: *** [CMakeFiles/Makefile2:742: src/SOS/Strike/CMakeFiles/sos.dir/all] Error 2 [ 250s] make: *** [Makefile:136: all] Error 2 [ 250s] Failed to build. ``` refer to 6b1e6c5
…or UserEvents IPC Command Support (#5657) This PR gives `dotnet-trace collect-linux` the option `--probe` to display which .NET processes are capable of parsing an EventPipe UserEvents IPC Command without collecting a trace. The option is compatible with `-p|--process-id` and `-n|--name` to probe a single .NET process. It is also compatible with `-o|--output` to generate a csv file ordered with supported processes first followed by unsupported in the format `pid,processName,supportsCollectLinux` (e.g. `1234,MyApp,true`). This also changes the behavior of `collect-linux` when tracing a single process from a silent failure to erroring with a message indicating that the single .NET process' runtime is not > 10.0.0. Support is determined as .NET Runtime 10.0.0 Release and onward. ### Probe option ```sh --probe Probe .NET processes for support of the EventPipe UserEvents IPC command used by collect-linux, without collecting a trace. Results list supported processes first. Use '-o stdout' to print CSV (pid,processName,supportsCollectLinux) to the console, or '-o <file>' to write the CSV. Probe a single process with -n|--name or -p|--process-id. ``` ### Example outputs One process that running .NET 10.0.0 and another using a preview. ```sh ./artifacts/bin/dotnet-trace/Debug/net8.0/dotnet-trace collect-linux --probe ========================================================================================== The collect-linux verb is a new preview feature and relies on an updated version of the .nettrace file format. The latest PerfView release supports these trace files but other ways of using the trace file may not work yet. For more details, see the docs at https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace. ========================================================================================== Probing .NET processes for support of the EventPipe UserEvents IPC command used by collect-linux. Requires runtime '10.0.0' or later. .NET processes that support the command: 3802935 MyApp .NET processes that do NOT support the command: 3809123 dotnet - Detected runtime: '10.0.0-rc.1.25451.107' ``` Printing csv to console ```sh ./artifacts/bin/dotnet-trace/Debug/net8.0/dotnet-trace collect-linux --probe -o stdout ========================================================================================== The collect-linux verb is a new preview feature and relies on an updated version of the .nettrace file format. The latest PerfView release supports these trace files but other ways of using the trace file may not work yet. For more details, see the docs at https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace. ========================================================================================== pid,processName,supportsCollectLinux 3802935,MyApp,true 3809123,dotnet,false ``` Writing results to csv file ```sh ./artifacts/bin/dotnet-trace/Debug/net8.0/dotnet-trace collect-linux --probe -o probe.out ========================================================================================== The collect-linux verb is a new preview feature and relies on an updated version of the .nettrace file format. The latest PerfView release supports these trace files but other ways of using the trace file may not work yet. For more details, see the docs at https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace. ========================================================================================== Successfully wrote EventPipe UserEvents IPC command support results to '/home/mihw/repo/diagnostics/probe.out'. ``` Generated csv ```csv pid,processName,supportsCollectLinux 3802935,MyApp,true 3809123,dotnet,false ``` Targeting a single process running .NET runtime 10.0.0 ```sh ./artifacts/bin/dotnet-trace/Debug/net8.0/dotnet-trace collect-linux --probe -n MyApp ========================================================================================== The collect-linux verb is a new preview feature and relies on an updated version of the .nettrace file format. The latest PerfView release supports these trace files but other ways of using the trace file may not work yet. For more details, see the docs at https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace. ========================================================================================== .NET process 'MyApp (3802935)' supports the EventPipe UserEvents IPC command used by collect-linux. ``` Targeting a single process older than .NET runtime 10.0.0 release ```sh ./artifacts/bin/dotnet-trace/Debug/net8.0/dotnet-trace collect-linux --probe -p 3809123 ========================================================================================== The collect-linux verb is a new preview feature and relies on an updated version of the .nettrace file format. The latest PerfView release supports these trace files but other ways of using the trace file may not work yet. For more details, see the docs at https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace. ========================================================================================== .NET process 'dotnet (3809123)' does NOT support the EventPipe UserEvents IPC command used by collect-linux. Required runtime: '10.0.0'. Detected runtime: '10.0.0-rc.1.25451.107'. ```
This pull request updates the following dependencies [marker]: <> (Begin:cb58fe07-ae24-4e73-0e84-08d8e40a189f) ## From https://github.com/microsoft/clrmd - **Subscription**: [cb58fe07-ae24-4e73-0e84-08d8e40a189f](https://maestro.dot.net/subscriptions?search=cb58fe07-ae24-4e73-0e84-08d8e40a189f) - **Build**: [20251210.1](https://dev.azure.com/dnceng/internal/_build/results?buildId=2858360) ([294188](https://maestro.dot.net/channel/548/github:microsoft:clrmd/build/294188)) - **Date Produced**: December 10, 2025 7:16:34 PM UTC - **Commit**: [41c1e91786141d37b26cfdfb8059fc522e81fb8d](microsoft/clrmd@41c1e91) - **Branch**: [main](https://github.com/microsoft/clrmd/tree/main) [DependencyUpdate]: <> (Begin) - **Dependency Updates**: - From [4.0.0-beta.25381.2 to 4.0.0-beta.25610.1][1] - Microsoft.Diagnostics.Runtime - Microsoft.Diagnostics.Runtime.Utilities [1]: microsoft/clrmd@f11663f...41c1e91 [DependencyUpdate]: <> (End) [marker]: <> (End:cb58fe07-ae24-4e73-0e84-08d8e40a189f) --------- Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: hoyosjs <19413848+hoyosjs@users.noreply.github.com>
mdh1418
approved these changes
Dec 15, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.