You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux x64环境下使用Dotnet-Dump如何导出堆?

解决转储文件中捕获堆信息的问题

问题原因

!heap是Windows原生调试命令,用来分析Windows系统堆,但你用dotnet dump collect默认收集的是**.NET Core/ASP.NET Core托管转储**,这类转储仅包含.NET运行时的托管数据,没有完整的Windows进程堆信息,所以Windbg找不到heap导出符号,才会报“No export heap found”错误。

正确捕获堆信息的方法

1. 收集包含原生堆的完整转储

默认的dotnet dump collect只抓取托管数据,要同时获取原生堆信息,需要添加--type full参数:

dotnet dump collect -p 1 --type full

生成的完整转储文件包含进程全部内存数据,之后在Windbg中执行!heap命令就能正常使用。

2. 用.NET专属命令分析托管堆

如果你的目标是分析.NET托管堆,不用依赖!heap,直接用Windbg的SOS扩展命令即可:

  • 若SOS未自动加载,手动加载:
    .load sos
    
  • 查看托管堆整体统计:
    !dumpheap -stat
    
  • 筛选查看特定类型的对象:
    !dumpheap -type <目标类型名>
    
  • 追踪对象的引用链:
    !gcroot <对象内存地址>
    

3. AKS容器环境的注意事项

  • 微软默认的ASP.NET 7.0.9镜像可能未预装dotnet-dump工具,需要先在容器内安装:
    dotnet tool install --global dotnet-dump
    export PATH="$PATH:/root/.dotnet/tools"
    
  • 收集完整转储需要容器有足够磁盘空间,避免转储中途失败。

内容的提问来源于stack exchange,提问作者Leonardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:22:04