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

如何在Ubuntu 22.04 ARM64服务器上获取C#程序的JIT汇编输出?

在ARM64 Ubuntu 22.04上获取.NET 7程序的JIT汇编输出

方法一:使用.NET Runtime内置的JIT反汇编环境变量

这是最直接的方式,无需额外安装工具,功能类似Java的PrintAssembly。

  • 反汇编指定方法
    设置DOTNET_JitDisasm环境变量为目标方法的全名(包含类/命名空间),然后运行程序:

    DOTNET_JitDisasm="C.CurrentAction" dotnet run --configuration Release
    

    运行后控制台会直接输出该方法的ARM64汇编代码,格式与你提供的示例一致。

  • 反汇编多个方法
    用逗号分隔多个方法名:

    DOTNET_JitDisasm="C.CurrentAction,Namespace.Class.TargetMethod" dotnet run --configuration Release
    
  • 反汇编所有方法
    将变量值设为*即可:

    DOTNET_JitDisasm="*" dotnet run --configuration Release
    

方法二:增强输出可读性(显示符号信息)

配合DOTNET_JitDisasmSymbols环境变量,输出会包含局部变量名、参数等调试符号:

DOTNET_JitDisasm="C.CurrentAction" DOTNET_JitDisasmSymbols=1 dotnet run --configuration Release

方法三:使用dotnet dump工具事后分析

如果需要先运行程序,再离线分析JIT汇编,可使用dotnet dump:

  1. 安装dotnet dump工具:

    dotnet tool install -g dotnet-dump
    
  2. 运行程序并生成转储文件:

    # 后台运行程序
    dotnet run --configuration Release &
    # 获取进程ID
    PID=$!
    # 生成转储文件
    dotnet dump collect -p $PID
    
  3. 分析转储文件查看汇编:

    dotnet dump analyze <生成的dump文件名>
    

    在分析会话中,执行disasm命令指定目标方法:

    disasm C.CurrentAction
    

注意事项

  • 务必使用Release模式运行程序,Debug模式下JIT会禁用大部分优化,生成的汇编代码包含大量调试指令,无法反映生产环境的实际执行情况。
  • 若目标是类库项目,需编写一个控制台测试项目引用该类库,再执行上述命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:55:38