一:背景
1.讲故事
前几天 B 站上有位朋友让我从高级调试的角度来解读下 .NET7 新出来的 AOT,毕竟这东西是新的,所以这一篇我就简单摸索一下。
二:AOT 的几个问题
1. 如何在 .NET7 中开启 AOT 功能
在 .NET7 中开启 AOT 非常方便,先来段测试代码。
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("hello world!");
Debugger.Break();
}
}
然后在项目配置上新增 <PublishAot>true</PublishAot>
节点,如下输出:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PublishAot>true</PublishAot>
</PropertyGroup>
</Project>
接下来在项目中右键选择 发布
,选择一个输出地,这样一个 AOT 程序就完成了。
2. SOS 可以调试 AOT 程序吗
这是很多朋友关心的话题,我们都知道 SOS 是用来撬开 CoreCLR 的,只要能看到 CoreCLR.dll,那 SOS 就能用,接下来用 WinDbg 附加到 ConsoleApp2.exe
上,使用 lm
观察。
0:000> lm
start end module name
00007ff6`11680000 00007ff6`1196f000 ConsoleApp2 C (pr