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

未关闭
#5,985 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
55/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
cpp

调研方向

使用列出的运行时和 DAC 选项,通过 dotnet-dump analyze heap.dmp 重现,然后检查指定的 SOS.Tests.SpecializedInspectionTests.SyncBlk_ReportsInflatedMonitor 和 GcInspectionTests.VerifyHeap_ReportsNoCorruption 配置。将 macOS x64 上使用 legacy-DAC 的行为与 cDAC、LLDB 和 Ubuntu 上通过的运行进行比较。当 syncblk 列出被持有的 SyncBlock,且 verifyheap 报告 0 个错误并且未检测到堆损坏时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

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.
主要语言
C++
星标
1.3k
派生
407
平均合并
21 小时 5 分钟
30 天内合并 PR
78

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 没有贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

dotnet/diagnostics 的其他 Issue

查看 dotnet/diagnostics 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。