如何在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:
安装dotnet dump工具:
dotnet tool install -g dotnet-dump运行程序并生成转储文件:
# 后台运行程序 dotnet run --configuration Release & # 获取进程ID PID=$! # 生成转储文件 dotnet dump collect -p $PID分析转储文件查看汇编:
dotnet dump analyze <生成的dump文件名>在分析会话中,执行
disasm命令指定目标方法:disasm C.CurrentAction
注意事项
- 务必使用Release模式运行程序,Debug模式下JIT会禁用大部分优化,生成的汇编代码包含大量调试指令,无法反映生产环境的实际执行情况。
- 若目标是类库项目,需编写一个控制台测试项目引用该类库,再执行上述命令。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

