Unable to profile Metal app on M2 Ultra (profiling works on M3 Pro)

On MacBook Pro M3 14" I can profile the Metal App performance by running it, then clicking on the M icon and choosing profile after replay.

On Mac Studio M2 Ultra I cannot: the profiler starts and crashes. I have tried everything including reinstalling the OS, Xcode, the Metal SDK, you name it.

The app uses the Metal 4 API. The content of the replayer errorinfo report is shown at the end.

Any ideas what is going on here and/or what else I can do do root cause this and fix it?

FWIW, it was worse on 26.1 (Xcode just reported Metal 4 profiling not available). In 26.2 Xcode attempts to profile and invariably crashes.

=== Error summary: ===
1x DYErrorDomain (512) - guest app crashed (512)
1x com.apple.gputools.MTLReplayer (100) - Abort trap: 6

=== First Error ===
Domain: DYErrorDomain
Error code: 512

Description: guest app crashed (512)

GTErrorKeyPID: 26913

GTErrorKeyProcessName: GPUToolsReplayService

GTErrorKeyCrashDate: 2026-01-09 19:22:52 +0000

=== Underlying Error #1 ===
Domain: com.apple.gputools.MTLReplayer
Error code: 100

Description: Abort trap: 6

Call stack:
0   GPUToolsReplay                      0x0000000249c25850 MakeNSError + 284
1   GPUToolsReplay                      0x0000000249c26428 HandleCrashSignal + 252
2   libsystem_platform.dylib            0x00000001856c7744 _sigtramp + 56
3   libsystem_pthread.dylib             0x00000001856bd888 pthread_kill + 296
4   libsystem_c.dylib                   0x00000001855c2850 abort + 124
5   libsystem_c.dylib                   0x00000001855c1a84 err + 0
6   IOGPU                               0x00000001a9ea60a8 -[IOGPUMetal4CommandQueue _commit:count:commitFeedback:].cold.1 + 0
7   IOGPU                               0x00000001a9ea0df8 __77-[IOGPUMetal4CommandQueue commitFillArgs:count:args:argsSize:commitFeedback:]_block_invoke + 0
8   IOGPU                               0x00000001a9ea1004 -[IOGPUMetal4CommandQueue _commit:count:commitFeedback:] + 148
9   AGXMetalG14X                        0x00000001158a2c98 -[AGXG14XFamilyCommandQueue_mtlnext noMergeCommit:count:options:commitFeedback:error:] + 116
10  AGXMetalG14X                        0x0000000115a45c14 +[AGXG14XFamilyRenderContext_mtlnext mergeRenderEncoders:count:options:commitFeedback:queue:error:] + 4740
11  AGXMetalG14X                        0x00000001158a2b34 -[AGXG14XFamilyCommandQueue_mtlnext commit:count:options:] + 96
12  GPUToolsReplay                      0x0000000249bf0644 GTMTLReplayController_defaultDispatchFunction_noPinning + 2744
13  GPUToolsReplay                      0x0000000249befb10 GTMTLReplayController_defaultDispatchFunction + 1368
14  GPUToolsReplay                      0x0000000249b7a61c _ZL16DispatchFunctionP21GTMTLReplayControllerPK11GTTraceFuncRb + 476
15  GPUToolsReplay                      0x0000000249b8603c ___ZN35GTUSCSamplingStreamingManagerHelper19StreamFrameTimeDataEv_block_invoke + 456
16  Foundation                          0x0000000186f6c878 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 24
17  Foundation                          0x0000000186f6c740 -[NSBlockOperation main] + 96
18  Foundation                          0x0000000186f6c6d8 __NSOPERATION_IS_INVOKING_MAIN__ + 16
19  Foundation                          0x0000000186f6c308 -[NSOperation start] + 640
20  Foundation                          0x0000000186f6c080 __NSOPERATIONQUEUE_IS_STARTING_AN_OPERATION__ + 16
21  Foundation                          0x0000000186f6bf70 __NSOQSchedule_f + 164
22  libdispatch.dylib                   0x00000001855104d0 _dispatch_block_async_invoke2 + 148
23  libdispatch.dylib                   0x000000018551aad4 _dispatch_client_callout + 16
24  libdispatch.dylib                   0x00000001855056e4 _dispatch_continuation_pop + 596
25  libdispatch.dylib                   0x0000000185504d58 _dispatch_async_redirect_invoke + 580
26  libdispatch.dylib                   0x0000000185512fc8 _dispatch_root_queue_drain + 364
27  libdispatch.dylib                   0x0000000185513784 _dispatch_worker_thread2 + 180
28  libsystem_pthread.dylib             0x00000001856b9e10 _pthread_wqthread + 232
29  libsystem_pthread.dylib             0x00000001856b8b9c start_wqthread + 8

Replayer breadcrumbs:
[

]

GTErrorKeyProcessSignal: SIGABRT

=== Setup ===
Capture device:	star.localdomain (Mac14,14) - macOS 26.2 (25C56) - 0BA10D1D-D340-5F2E-934B-536675AF9BA1
Metal version: 370.64.2
Supported graphics APIs:
  Metal device: Apple M2 Ultra
    Supported GPU families: Apple1 Apple2 Apple3 Apple4 Apple5 Apple6 Apple7 Apple8 Mac1 Mac2 Common1 Common2 Common3 Metal3 Metal4
Replay device:	star (Mac14,14) - macOS 26.2 (25C56) - 0BA10D1D-D340-5F2E-934B-536675AF9BA1
Metal version: 370.64.2
Supported graphics APIs:
  Metal device: Apple M2 Ultra
    Supported GPU families: Apple1 Apple2 Apple3 Apple4 Apple5 Apple6 Apple7 Apple8 Mac1 Mac2 Common1 Common2 Common3 Metal3 Metal4
Host:			Mac14,14 - macOS 26.2 (25C56)
Tool:			Xcode (17C52)

Known SDKs:

To clarify: this happens only for apps using the Metal 4 API. I can profile pre-Metal 4 apps on the Studio just fine.

Unable to profile Metal app on M2 Ultra (profiling works on M3 Pro)
 
 
Q