专栏名称: dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
今天看啥  ›  专栏  ›  dotNET跨平台

.NET8顶级调试lldb观察FOH堆字符串分配

dotNET跨平台  · 公众号  ·  · 2023-12-07 08:00

文章预览

点击上方 蓝字 江湖评谈 设为关注 前言 好久没有动用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 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览