文章预览
点击上方 蓝字 江湖评谈 设为关注 前言 好久没有动用LLDB了,这种未来的下一代高性能调试器应该是用在Linux内核系统的Arm64/Riscv64/X64系统指令集上的, LLDB Debug .NET有点 杀鸡用牛刀。本篇通过它来看下FOH也就是.NET8里面优化字符串,为了提高其性能增加的 FOH堆分配过程。关于FOH可以参考: .NET8极致性能优化Non-GC Heap 详细 来看一个简单的例子: public static string GetPrefix ( ) => "https://" ; static void Main ( string [] args ) { GetPrefix(); GC.Collect(); Console.ReadLine(); } 函数GetPrefix里面的字符串“https://”就是被分配到FOH堆里面的,如何验证呢? 首先通过LLDB把CLR运行到托管Main入口 (lldb) b RunMainInternal Breakpoint 7: where = libcoreclr.so`RunMainInternal(Param*) at assembly.cpp:1257, address = 0x00007ffff6d43930 (lldb) r Process 2697 launched: '/home/tang/opt/dotnet/debug_clr/clrrun' (x86_64) Process
………………………………