Legacy DAC SyncBlock data is unavailable for macOS x64 .NET 11 dumps

Aperta
#5,985 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
55/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
cpp

Direzione di ricerca

Riprodurre con dotnet-dump analyze heap.dmp usando i runtime e le opzioni DAC elencati, quindi esaminare le configurazioni indicate SOS.Tests.SpecializedInspectionTests.SyncBlk_ReportsInflatedMonitor e GcInspectionTests.VerifyHeap_ReportsNoCorruption. Confrontare il comportamento di macOS x64 con legacy-DAC con le esecuzioni riuscite con cDAC, LLDB e Ubuntu. Il lavoro è completato quando syncblk elenca il SyncBlock mantenuto e verifyheap segnala 0 errori senza rilevare corruzione dell'heap.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
Description

When a macOS x64 .NET 11 dump is analyzed with dotnet-dump and the matching legacy DAC, SyncBlock data is unavailable. This causes two deterministic SOS failures against the same capture-family dump.

syncblk fails instead of listing an intentionally inflated, held monitor:

> syncblk
Error requesting SyncBlk data

verifyheap consequently reports apparent heap corruption for an object whose SyncBlock cannot be found:

Segment          Object           Failure             Reason
00058acda2d0     00018c4052f8     SyncBlockMismatch   Object 18c4052f8 System.Object had a SyncBlock index of 1 but the runtime has no matching SyncBlock
1,154 objects verified, 1 error.

Expected behavior:

  • syncblk lists the held SyncBlock with MonitorHeld > 0.
  • verifyheap reports 0 errors and No heap corruption detected.

Minimal replay:

dotnet-dump analyze heap.dmp
> runtimes --usecdac false --DacSignatureVerification false
> syncblk
> verifyheap

The failures reproduce in both Debug and Release SOS.Tests runs. Corresponding cDAC and LLDB configurations pass against the identical capture-family dump. The exact legacy-DAC dotnet-dump configurations also pass on Ubuntu, indicating that capture/transfer corruption is not involved and that this is macOS-specific.

Configuration
  • Tool: dotnet-dump
  • Host: macOS 15 x64 (osx.15.amd64.open)
  • Target runtime: .NET 11.0.26.42702; product layout 11.0.0-rc.2.26426.102
  • Target: Core framework-dependent debuggee
  • GC: Workstation
  • Analysis mode: Heap dump
  • DAC: matching legacy libmscordaccore.dylib
  • Test configurations:
    • SOS.Tests.SpecializedInspectionTests.SyncBlk_ReportsInflatedMonitor(config: scenarios/DotnetDump/Core/net11/Dump/Workstation/Heap)
    • SOS.Tests.GcInspectionTests.VerifyHeap_ReportsNoCorruption(config: scenarios/DotnetDump/Core/net11/Dump/Workstation/Heap)
  • Observed in dotnet/diagnostics#5981
  • Helix jobs:
Regression?

This does not appear entirely new. Diagnostics tests have skipped Unix syncblk validation since 667723e0 in October 2019, with the comment:

On Linux/MacOS we sometimes get "Error requesting SyncBlk data" error from the DAC.

The new SOS.Tests harness makes the failure deterministic for this .NET 11 macOS scenario and also exposes the associated verifyheap false positive.

Other information
  • stderr is empty.
  • The matching runtime and legacy DAC load successfully.
  • Other SOS commands work in the same dotnet-dump session.
  • Ubuntu Debug and Release both pass these exact .NET 11 legacy-DAC configurations.
  • This is distinct from dotnet/runtime#124691, which implemented the cDAC GetSyncBlockData API.
  • Related historical issue: dotnet/runtime#11407, which enabled syncblk on Unix.
Lingua principale
C++
Stelle
1.3k
Fork
407
Merge medio
21h 5m
PR unite (30g)
78

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

  • Nessun Dockerfile né file Docker Compose
  • Nessun modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di dotnet/diagnostics

Tutte le issue di dotnet/diagnostics

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.