3. WinDbg程序调试

总目录

1. WinDbg概述
2. WinDbg主要功能
3. WinDbg程序调试示例
4. CPU寄存器及指令系统
5. CPU保护模式概述
6. 汇编语言不等于CPU指令
7. 用WinDbg观察托管程序架构
8. Windows PE/COFF文件格式简述
9. 让WinDbg自动打开DotNet Runtime源程序
10. WinDbg综合实战

前言

上一篇《2. WinDbg主要功能》中,我们通过对notepad.exe及一个自编C#反汇编的分析,让大家初步认识了WinDbg的部分功能,尤其分析了托管代码的值类型与引用类型在CPU级别的实现。

本篇,我们将使用一个全新的C#示例,继续介绍几个分析C#程序经常会用到的WinDbg命令,如要包括:

  • r:显示或修改cpu寄存器
  • dg:显示cpu段描述符
  • wt:函数调用追踪
  • !clrstack:托管栈追踪
  • 条件断点
    本文重点是条件断点,但同时记录了一次调试崩溃的函数调用过程。

源代码

本篇,我们将通过WinDbg分析C#语言的for循环的汇编级实现。源程序如下,首先初始化了一个int型变量sum,然后通过for循环完成从1到100的整数加法。

namespace BasicGrammar;
class Program
{    static void Main()
    {
        System.Diagnostics.Debugger.Break();
        int sum = 0;
        for(int i = 1; i <= 100; i++)
        {
            sum += i;
            Console.WriteLine(sum);
        }
    }
}

程序的加载

我们先来分析一下,当使用WinDbg打开一个应用程序(如下图所示)时,后台模块的加载过程。

在这里插入图片描述
下面的列表是完成上述操作后,WinDbg主窗口输出的与模块加载相关的部分信息:

ModLoad: 00007ff6`33bb0000 00007ff6`33bd9000   apphost.exe
ModLoad: 00007ffb`cb1b0000 00007ffb`cb3c7000   ntdll.dll
ModLoad: 00007ffb`c9710000 00007ffb`c97d4000   C:\Windows\System32\KERNEL32.DLL
ModLoad: 00007ffb`c8550000 00007ffb`c88fd000   C:\Windows\System32\KERNELBASE.dll
ModLoad: 00007ffb`ca6f0000 00007ffb`ca89e000   C:\Windows\System32\USER32.dll
ModLoad: 00007ffb`c8cd0000 00007ffb`c8cf6000   C:\Windows\System32\win32u.dll
ModLoad: 00007ffb`ca8a0000 00007ffb`ca8c9000   C:\Windows\System32\GDI32.dll
ModLoad: 00007ffb`c8a90000 00007ffb`c8ba9000   C:\Windows\System32\gdi32full.dll
ModLoad: 00007ffb`c8900000 00007ffb`c899a000   C:\Windows\System32\msvcp_win.dll
ModLoad: 00007ffb`c8bb0000 00007ffb`c8cc1000   C:\Windows\System32\ucrtbase.dll
ModLoad: 00007ffb`ca8d0000 00007ffb`cb12f000   C:\Windows\System32\SHELL32.dll
ModLoad: 00007ffb`ca4e0000 00007ffb`ca592000   C:\Windows\System32\ADVAPI32.dll
ModLoad: 00007ffb`c8f50000 00007ffb`c8ff7000   C:\Windows\System32\msvcrt.dll
ModLoad: 00007ffb`c9ed0000 00007ffb`c9f79000   C:\Windows\System32\sechost.dll
ModLoad: 00007ffb`c8a60000 00007ffb`c8a88000   C:\Windows\System32\bcrypt.dll
ModLoad: 00007ffb`c9f80000 00007ffb`ca094000   C:\Windows\System32\RPCRT4.dll
(5344.654): Break instruction exception - code 80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00007ffb`cb28bed4 cc              int     3

首先看第一行:

ModLoad: 00007ff633bb0000 00007ff633bd9000 apphost.exe

  • ModLoad:模块加载(module load的简写)。目前,我们可以简单将模块(module)理解为或者是exe或者是dll文件。
  • 00007ff6`33bb0000:被加载模块在内存的起始地址
  • 00007ff6`33bd9000:被加载模块在内存的结束地址
  • apphost.exe:被加载的模块名

我们可以使用内存逐字节显示命令db显示一下被加载的内存:

0:000> db 00007ff6`33bb0000 00007ff6`33bd9000
00007ff6`33bb0000  4d 5a 90 00 03 00 00 00-04 00 00 00 ff ff 00 00  MZ..............
00007ff6`33bb0010  b8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00  ........@.......
00007ff6`33bb0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
00007ff6`33bb0030  00 00 00 00 00 00 00 00-00 00 00 00 f0 00 00 00  ................
00007ff6`33bb0040  0e 1f ba 0e 00 b4 09 cd-21 b8 01 4c cd 21 54 68  ........!..L.!Th
00007ff6`33bb0050  69 73 20 70 72 6f 67 72-61 6d 20 63 61 6e 6e 6f  is program canno
00007ff6`33bb0060  74 20 62 65 20 72 75 6e-20 69 6e 20 44 4f 53 20  t be run in DOS 
00007ff6`33bb0070  6d 6f 64 65 2e 0d 0d 0a-24 00 00 00 00 00 00 00  mode....$.......
00007ff6`33bb0080  ce b9 94 bf 8a d8 fa ec-8a d8 fa ec 8a d8 fa ec  ................
00007ff6`33bb0090  8a d8 fa ec 8b d8 fa ec-48 59 fe ed 86 d8 fa ec  ........HY......
00007ff6`33bb00a0  48 59 f9 ed 98 d8 fa ec-48 59 ff ed dc d8 fa ec  HY......HY......
00007ff6`33bb00b0  83 a0 69 ec 9a d8 fa ec-c1 a0 fb ed 83 d8 fa ec  ..i.............
00007ff6`33bb00c0  8a d8 fb ec 43 d8 fa ec-a3 5a f3 ed 80 d8 fa ec  ....C....Z......
00007ff6`33bb00d0  a3 5a f8 ed 8b d8 fa ec-52 69 63 68 8a d8 fa ec  .Z......Rich....
00007ff6`33bb00e0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
00007ff6`33bb00f0  50 45 00 00 64 86 07 00-00 00 cd 65 00 00 00 00  PE..d......e....
00007ff6`33bb0100  00 00 00 00 f0 00 22 00-0b 02 0e 27 00 6a 01 00  ......"....'.j..
00007ff6`33bb0110  00 d0 00 00 00 00 00 00-60 13 01 00 00 10 00 00  ........`.......
00007ff6`33bb0120  00 00 bb 33 f6 7f 00 00-00 10 00 00 00 02 00 00  ...3............
......

db后面我们使用了起始地址+空格+结束地址的语法,这是内存区域语法之一,也可以使用起始地址+空格+L+长度语法。
如何查看起始地址到结束地址之间的长度?用结束地址-起始地址+1即可:

0:000> ? 00007ff6`33bd9000 - 00007ff6`33bb0000 + 1
Evaluate expression: 167937 = 00000000`00029001

167937是两个十六进制64位地址运算的十进制数字表达,等号后面是对应的十六进制表达。所以上面的db命令也可以改写为:

0:000> db 00007ff633bb0000 L0000000000029001

**疑问:**为什么我们用WinDbg加载的是Core.exe,但实际加载列表中未发现Core.exe?apphost.exe是什么鬼?
其实,apphost.exe就是Core.exe. 你可以自己用十六进制编辑器将Core.exe打开,然后和上面我们用db命令显示的内存进行一下比较,会发现两者是完全一样的。另外,apphost.exe只是.NET5+使用的托管应用宿主程序,其运行以后会加载真实的托管模块Core.dll。我们可以用内存搜索命令s查一下上面db命令显示的内存空间是否存在Core.dll:

0:000> s -a 00007ff6`33bb0000 L00000000`00029001 "Core.dll"
00007ff6`33bd2130  43 6f 72 65 2e 64 6c 6c-00 00 00 00 00 00 00 00  Core.dll........
0:000> s -u 00007ff6`33bb0000 L00000000`00029001 "Core.dll"
00007ff6`33bd820c  0043 006f 0072 0065 002e 0064 006c 006c  C.o.r.e...d.l.l.
00007ff6`33bd8270  0043 006f 0072 0065 002e 0064 006c 006c  C.o.r.e...d.l.l.

上面,我们分别用s命令的ASCII选项-a和Unicode选项-u查找同一段内存,发现有一处Ascii和两处Unicode都指向了Core.dll文件。不过这个dll目前尚未被加载,原因很简单:此时apphost.exe尚未运行。

通过以上分析,我们知道,既然我们是用WinDbg打开Core.exe,所以WinDbg第一个要加载的模块也必须是Core.exe,只不过WinDbg并未显示真实文件名,而是显示成了apphost.exe。至于为什么要这样设计,我们会在后面的文章中解释。

下面我们继续分析第二行:

ModLoad: 00007ffbcb1b0000 00007ffbcb3c7000 ntdll.dll

WinDbg加载完apphost.exe以后,马上开始加载ntdll.dll,这个模块的加载不是由apphost决定的,而是由操作系统决定的。在Windows环境下,任何一个用户进程都需要加载ntdll模块,最简单的原因就是:当Windows进程被创建时,ntdll.dll会参与进程的初始化过程,会设置进程的环境变量、堆(Heap)、线程和模块加载等,为进程的运行提供一个稳定和一致的环境。其他如KERNELBASE,KERNEL32,USER32等也是类似道理。

下面我们再看看启动画面显示的最后一部分:

(5344.654): Break instruction exception - code 80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00007ffb`cb28bed4 cc              int     3

这三行说了一件事:WinDbg加载完上述模块以后,当程序主线程执行到ntdll模块的LdrpDoDebuggerBreak函数的第0x30字节时,遇到了断点指令(int 3),该指令位于00007ffb`cb28bed4位置,该指令对应的CPU指令码是单字节cc。操作系统是以断点指令异常(Break instruction exception)方式报告给WinDbg的,该异常代码是80000003,而且这是该异常第一次分发(first chance)。开始的5344是操作系统标记的进程号,654是操作系统记录的当前线程号,可以分别使用进程查询命令(|)和线程查询命令(~)获取:

0:000> |
.  0	id: 5344	create	name: apphost.exe
0:000> ~
.  0  Id: 5344.654 Suspend: 1 Teb: 00000000`003bd000 Unfrozen
其他线程略

WinDbg命令分类

WinDbg有三种命令,分别为基本命令、元命令和扩展命令。以半角句点(.)开始的是元命令,以半角感叹号(!)开始的是扩展命令,无任何标记的是基本命令。有关这三种命令的细节我们将在第七篇详细介绍,目前仅需知道,扩展命令不是WinDbg自带的,而是通过加载第三方dll的方式扩展的。在使用WinDbg分析.NET应用时,经常会用到sos.dll,这个模块提供了很多与托管代码调试相关的扩展命令,比如我们上一篇中使用的!u反汇编命令就来自于sos扩展,本篇我们将遇到的!clrstack,!dso等都是sos扩展。

for循环汇编级分析

下面我们开始进入主题:用WinDbg从汇编级别分析C#的for循环。
首先输入g命令执行程序,程序会在遇到Debugger.Break()设置的int 3指令断点处被断下:

0:000> g
ModLoad: 00007ffb`cb130000 00007ffb`cb161000   C:\Windows\System32\IMM32.DLL
ModLoad: 00007ffb`3d0e0000 00007ffb`3d139000   C:\Program Files\dotnet\host\fxr\8.0.3\hostfxr.dll
ModLoad: 00007ffb`90530000 00007ffb`90594000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\hostpolicy.dll
ModLoad: 00007ffb`32470000 00007ffb`32956000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\coreclr.dll
ModLoad: 00007ffb`ca0b0000 00007ffb`ca255000   C:\Windows\System32\ole32.dll
ModLoad: 00007ffb`c9090000 00007ffb`c9418000   C:\Windows\System32\combase.dll
ModLoad: 00007ffb`c95d0000 00007ffb`c96a7000   C:\Windows\System32\OLEAUT32.dll
ModLoad: 00007ffb`c8e70000 00007ffb`c8eeb000   C:\Windows\System32\bcryptPrimitives.dll
(5344.654): Unknown exception - code 04242420 (first chance)
ModLoad: 00007ffb`27280000 00007ffb`27f0c000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\System.Private.CoreLib.dll
ModLoad: 00007ffb`31c40000 00007ffb`31df9000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\clrjit.dll
ModLoad: 00007ffb`c75a0000 00007ffb`c75b8000   C:\Windows\SYSTEM32\kernel.appcore.dll
ModLoad: 00000000`02330000 00000000`02338000   E:\test\a\Core\bin\Debug\net8.0\Core.dll
ModLoad: 00000000`02340000 00000000`0234e000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\System.Runtime.dll
ModLoad: 00007ffb`87180000 00007ffb`871a8000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.3\System.Console.dll
(5344.654): Break instruction exception - code 80000003 (first chance)
KERNELBASE!wil::details::DebugBreak+0x2:
00007ffb`c8667a72 cc              int     3

我们使用上一篇介绍的快速回到Main方法的手段,让程序从当前的KERNELBASE!wil::details::DebugBreak+0x2回到Main方法中:

0:000> k
 # Child-SP          RetAddr               Call Site
00 00000000`001cead8 00007ffb`32682359     KERNELBASE!wil::details::DebugBreak+0x2
01 00000000`001ceae0 00007ffb`276a550a     coreclr!DebugDebugger::Break+0x149 [D:\a\_work\1\s\src\coreclr\vm\debugdebugger.cpp @ 150] 
02 00000000`001cec60 00007ffa`d2a61958     System_Private_CoreLib!System.Diagnostics.Debugger.Break+0xa [/_/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs @ 18] 
03 00000000`001cec90 00007ffb`325cb8c3     Core!BasicGrammar.Program.Main+0x28 [E:\test\a\Core\Program.cs @ 5] 

0:000> g Core!BasicGrammar.Program.Main+0x28
Core!BasicGrammar.Program.Main+0x28:
00007ffa`d2a61958 90              nop

此时系统会自动将C#源代码载入,界面截图如下:

在这里插入图片描述
上面截图中,虽然左侧的反汇编窗口已经可以和中间的C#源代码对应,不过因为这个反汇编是WinDbg根据CoreClr的JIT编译器编译后代码做的反汇编,没有任何源代码信息,也没有符号,看起来不是特别直观。所以,我们可以再次使用第一篇中介绍的技术,使用!sos.u命令:

0:000> !sos.u 00007ffa`d2a61958

然后,就非常方便C#源代码与汇编代码的对应了,如下图所示:

在这里插入图片描述
以上关键要注意的是源代码的第7行:for(int i = 1; i <= 100; i++),在汇编级别,其实它被分成了两部分,两部分之间夹着循环体(8 ~ 11行)。为了便于理解,我将循环体部分省略掉,汇编代码格式如下:

E:\test\a\Core\Program.cs @ 6: int sum = 0;
00007ffa`d2a61959 33c9            xor     ecx,ecx
00007ffa`d2a6195b 894dfc          mov     dword ptr [rbp-4],ecx ;初始化 int sum = 0

E:\test\a\Core\Program.cs @ 7:
00007ffa`d2a6195e c745f801000000  mov     dword ptr [rbp-8],1  ;初始化 int i = 0
00007ffa`d2a61965 90              nop
00007ffa`d2a61966 eb1d            jmp     Core!BasicGrammar.Program.Main+0x55 (00007ffa`d2a61985)

E:\test\a\Core\Program.cs @ 8 ~ 11: 略

E:\test\a\Core\Program.cs @ 7:
00007ffa`d2a6197d 8b45f8          mov     eax,dword ptr [rbp-8] ;i 赋值给eax
00007ffa`d2a61980 ffc0            inc     eax; eax + 1
00007ffa`d2a61982 8945f8          mov     dword ptr [rbp-8],eax ; i 值加 1 覆盖到原来的i中
00007ffa`d2a61985 33c9            xor     ecx,ecx ;使exc高位置0,以确保下面语句的cl和ecx值相等
00007ffa`d2a61987 837df864        cmp     dword ptr [rbp-8],64h ;比较变量 i 和 100
00007ffa`d2a6198b 0f9ec1          setle   cl ;入股i ≤ 100,则cl置1,否则置0
00007ffa`d2a6198e 894df4          mov     dword ptr [rbp-0Ch],ecx
00007ffa`d2a61991 837df400        cmp     dword ptr [rbp-0Ch],0
00007ffa`d2a61995 75d1            jne     Core!BasicGrammar.Program.Main+0x38 (00007ffa`d2a61968);如i≤100则跳转到循环体开始。

根据以上代码及我写的注释,C#的for循环结构应该非常清晰了:

  • int i = 0 只执行一次,然后使用跳转比较 i 和 100,如果 i ≤ 100,就跳转到循环体执行
  • 循环体执行完毕以后,将i值传送给eax寄存器并加1,然后重新将eax存回 i 变量所属内存,之后执行上一步比较。

r命令

程序的执行离不开CPU寄存器,所以在使用WinDbg调试程序时,经常要使用r命令显示寄存器的当前值。
另外,r命令也可以修改寄存器值。

备注:实际显示及修改的寄存器值并非实时CPU寄存器值,而是线程上下文保存的寄存器状态快照值。如果对进程或线程不理解,可能会不理解这句话,可以忽略。

1. 显示寄存器:r命令

r命令非常简单,输入r并回车,就可以显示CPU各寄存器的值:

0:000> r
rax=0000000000000000 rbx=00000000001cedc8 rcx=74224911a5ae0000
rdx=000000000051bd40 rsi=00000000001ced78 rdi=00000000001cef18
rip=00007ffad2a61958 rsp=00000000001cec90 rbp=00000000001cecc0
 r8=0000000000000130  r9=00000000001cef09 r10=00007ffb32904678
r11=00000000001cec40 r12=00000000001ced30 r13=0000000000000004
r14=0000000000000000 r15=00000000001cee90
iopl=0         nv up ei pl nz na po nc
cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
Core!BasicGrammar.Program.Main+0x28:
00007ffa`d2a61958 90              nop

首先需要关注rbp寄存器,当前rbp=00000000001cecc0,因为当前栈帧是在Main方法中,所以Main的所有局部变量地址都一定是小于当前rbp的,我们在前面对Main汇编分析时也知道,所有变量地址都是rbp减去一个数值。

2. 查看段描述符:dg + address
使用dg + <段选择子> 可以显示对应的段描述符 (segment descriptor),比如从上面的寄存器列表我们知道,数据段选择子ds = es = ss = gs = 002b,cs和gs段则与其不同。可以使用dg 段寄存器dg 段选择子可以列出对应的段描述符,唯一例外是cs段,因为是代码段,在用户态WinDbg不可读:

0:000> dg cs
                                                    P Si Gr Pr Lo
Sel        Base              Limit          Type    l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
0033 Unable to get descriptor
0:000> dg 002b
                                                    P Si Gr Pr Lo
Sel        Base              Limit          Type    l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
002B 00000000`00000000 00000000`ffffffff Data RW Ac 3 Bg Pg P  Nl 00000cf3
0:000> dg ds
                                                    P Si Gr Pr Lo
Sel        Base              Limit          Type    l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
002B 00000000`00000000 00000000`ffffffff Data RW Ac 3 Bg Pg P  Nl 00000cf3

从上面列表结果,我们可以知道,而且知道数据段基址从0000000000000000 ~ 00000000ffffffff,总计4GB地址空间,可读可写(RW),DPL=3,均为实际物理存在的段等等信息。一般在Windows环境下,FS:0通常用于保存异常处理链表头,所以FS的值也有所不同:

0:000> dg fs
                                                    P Si Gr Pr Lo
Sel        Base              Limit          Type    l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
0053 00000000`003bf000 00000000`00000fff Data RW Ac 3 Bg By P  Nl 000004f3

另外,段选择子的第3~15位是段索引,如果这部分相同,则处于同一个段。显然cs=0033,其去掉最低3位以后,其二进制值是0110,而ds的002b去掉最低3位后的二进制索引是0010,因此不是同一个段。

备注:有关段寄存器、段选择子和段描述符,涉及到CPU的保护模式基础知识,如果大家看不懂,可以暂时忽略,我也会在后续文章中对相关知识进行介绍。

故障描述

在写本系列文章的过程中,不止一次发生了调试失败的情况,基本都是单步运行过程中发生的,也就是一旦单步跟踪进被调用子程序,比如Console.WriteLine(),就可能导致类似下面的问题,至今未找到问题原因:

0:000> g
(2c18.4194): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
00007ffa`d2141548 0000            add     byte ptr [rax],al ds:00007ffa`d2141548=00

我个人猜想,出现这个问题的主要原因可能是因为我们的应用程序是.NET8.0的,属于跨平台的应用,肯定包含了很多与Windows原生应用不一致的特殊处理,而WinDbg是纯粹的Windows应用程序调试器,对于它和coreclr的交互应该还没有完全磨合好,或许改成.NET Framework程序就不会发生了,以后如果得到验证再更新。

万般无奈,我用wt命令做了一下调用展开,暂时先将将问题记录下来。如果读者有遇到类似问题并有解决方案,欢迎赐教。

0:000> wt
   17     0 [  0] coreclr!DebugDebugger::Break
   10     0 [  1]   coreclr!HelperMethodFrame::Pop
   19    10 [  0] coreclr!DebugDebugger::Break
    4     0 [  1]   coreclr!HelperMethodFrameRestoreState
   24    14 [  0] coreclr!DebugDebugger::Break
    6     0 [  1]   coreclr!__security_check_cookie
   33    20 [  0] coreclr!DebugDebugger::Break
   33    20 [  0] coreclr!DebugDebugger::Break
    3     0 [  0] System_Private_CoreLib!System.Diagnostics.Debugger.Break
    3     0 [  0] System_Private_CoreLib!System.Diagnostics.Debugger.Break
   18     0 [  0] Core!BasicGrammar.Program.Main
    1     0 [  1]   0x00007ffa`d21f0756
    1     0 [  1]   0x00007ffa`d21f075d
   20     0 [  1]   coreclr!ThePreStub
   11     0 [  2]     coreclr!PreStubWorker
    1     0 [  3]       KERNEL32!GetLastErrorStub
    3     0 [  3]       KERNELBASE!GetLastError
  103     4 [  2]     coreclr!PreStubWorker
   33     0 [  3]       coreclr!MethodDesc::DoPrestub
    5     0 [  4]         coreclr!MethodTable::ContainsGenericVariables
   43     5 [  3]       coreclr!MethodDesc::DoPrestub
    4     0 [  4]         coreclr!StressLog::LogOn
   79     9 [  3]       coreclr!MethodDesc::DoPrestub
  103     0 [  4]         coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
  223     0 [  5]           coreclr!ReadyToRunInfo::GetEntryPoint
   24     0 [  6]             coreclr!CrstBase::Enter
   10     0 [  7]               ntdll!RtlEnterCriticalSection
   32    10 [  6]             coreclr!CrstBase::Enter
  405    42 [  5]           coreclr!ReadyToRunInfo::GetEntryPoint
   19     0 [  6]             ntdll!RtlLeaveCriticalSection
  427    61 [  5]           coreclr!ReadyToRunInfo::GetEntryPoint
   11     0 [  6]             ntdll!LdrpDispatchUserCallTarget
   19     0 [  6]             coreclr!Debugger::JITComplete
  448    91 [  5]           coreclr!ReadyToRunInfo::GetEntryPoint
  120   539 [  4]         coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   11     0 [  5]           ntdll!LdrpDispatchUserCallTarget
   29     0 [  5]           coreclr!PrepareCodeConfig::SetNativeCode
  138   579 [  4]         coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
    7     0 [  5]           coreclr!DACNotifyCompilationFinished
    8     0 [  6]             coreclr!JITNotifications::JITNotifications
    9     8 [  5]           coreclr!DACNotifyCompilationFinished
    4     0 [  6]             coreclr!JITNotifications::IsActive
   13    12 [  5]           coreclr!DACNotifyCompilationFinished
  230   604 [  4]         coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   15     0 [  5]           coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
   19     0 [  6]             coreclr!CrstBase::Enter
   10     0 [  7]               ntdll!RtlEnterCriticalSection
   27    10 [  6]             coreclr!CrstBase::Enter
   51    37 [  5]           coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
   19     0 [  6]             ntdll!RtlLeaveCriticalSection
   63    56 [  5]           coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
  234   723 [  4]         coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
    6     0 [  5]           coreclr!__security_check_cookie
  244   729 [  4]         coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   86   982 [  3]       coreclr!MethodDesc::DoPrestub
   81     0 [  4]         coreclr!MethodDesc::DoBackpatch
   96  1063 [  3]       coreclr!MethodDesc::DoPrestub
  114  1163 [  2]     coreclr!PreStubWorker
    1     0 [  3]       coreclr!ThePreStubPatch
    1     0 [  3]       coreclr!ThePreStubPatchLabel
  130  1165 [  2]     coreclr!PreStubWorker
    1     0 [  3]       KERNEL32!SetLastErrorStub
   15     0 [  3]       ntdll!RtlSetLastWin32Error
    6     0 [  4]         ntdll!_security_check_cookie
   17     6 [  3]       ntdll!RtlSetLastWin32Error
  141  1189 [  2]     coreclr!PreStubWorker
   38  1330 [  1]   coreclr!ThePreStub
    1     0 [  1]   0x00007ffa`d21f0750
    4     0 [  1]   System_Console!System.Console.WriteLine
    4     0 [  2]     System_Console
   22     0 [  2]     coreclr!DelayLoad_MethodCall
   14     0 [  3]       coreclr!ExternalMethodFixupWorker
    1     0 [  4]         KERNEL32!GetLastErrorStub
    3     0 [  4]         KERNELBASE!GetLastError
   35     4 [  3]       coreclr!ExternalMethodFixupWorker
    4     0 [  4]         coreclr!Frame::GetReturnAddress
   11     0 [  5]           ntdll!LdrpDispatchUserCallTarget
    4     0 [  5]           coreclr!TransitionFrame::GetReturnAddressPtr
   11     0 [  6]             ntdll!LdrpDispatchUserCallTarget
    2     0 [  6]             coreclr!MulticastFrame::GetFunction
    7    13 [  5]           coreclr!TransitionFrame::GetReturnAddressPtr
   11    31 [  4]         coreclr!Frame::GetReturnAddress
  171    46 [  3]       coreclr!ExternalMethodFixupWorker
   13     0 [  4]         coreclr!MethodDesc::CheckRestore
  177    59 [  3]       coreclr!ExternalMethodFixupWorker
   96     0 [  4]         coreclr!MethodDesc::PrepareForUseAsADependencyOfANativeImageWorker
   11     0 [  5]           ntdll!LdrpDispatchUserCallTarget
   28     0 [  5]           coreclr!MDInternalRO::GetSigOfMethodDef
   11     0 [  6]             ntdll!LdrpDispatchUserCallTarget
   31     0 [  6]             coreclr!StgBlobPoolReadOnly::GetBlob
   40    42 [  5]           coreclr!MDInternalRO::GetSigOfMethodDef
  124    93 [  4]         coreclr!MethodDesc::PrepareForUseAsADependencyOfANativeImageWorker
   19     0 [  5]           coreclr!CorSigUncompressData
  225   112 [  4]         coreclr!MethodDesc::PrepareForUseAsADependencyOfANativeImageWorker
   36     0 [  5]           coreclr!SigParser::SkipExactlyOne
    5     0 [  6]             coreclr!CorSigUncompressToken
   19     0 [  7]               coreclr!CorSigUncompressData
   18    19 [  6]             coreclr!CorSigUncompressToken
   48    37 [  5]           coreclr!SigParser::SkipExactlyOne
  266   197 [  4]         coreclr!MethodDesc::PrepareForUseAsADependencyOfANativeImageWorker
  198   522 [  3]       coreclr!ExternalMethodFixupWorker
   13     0 [  4]         coreclr!DomainAssembly::EnsureLoadLevel
  218   535 [  3]       coreclr!ExternalMethodFixupWorker
   13     0 [  4]         coreclr!DomainAssembly::EnsureLoadLevel
  492   548 [  3]       coreclr!ExternalMethodFixupWorker
    1     0 [  4]         KERNEL32!SetLastErrorStub
   15     0 [  4]         ntdll!RtlSetLastWin32Error
    6     0 [  5]           ntdll!_security_check_cookie
   17     6 [  4]         ntdll!RtlSetLastWin32Error
  502   572 [  3]       coreclr!ExternalMethodFixupWorker
   39  1074 [  2]     coreclr!DelayLoad_MethodCall
    1     0 [  2]     coreclr!ExternalMethodFixupPatchLabel
    1     0 [  2]     0x00007ffa`d21f00c0
    1     0 [  2]     0x00007ffa`d21f00c6
    1     0 [  2]     0x00007ffa`d21f00cd
   20     0 [  2]     coreclr!ThePreStub
   11     0 [  3]       coreclr!PreStubWorker
    1     0 [  4]         KERNEL32!GetLastErrorStub
    3     0 [  4]         KERNELBASE!GetLastError
  103     4 [  3]       coreclr!PreStubWorker
   33     0 [  4]         coreclr!MethodDesc::DoPrestub
    5     0 [  5]           coreclr!MethodTable::ContainsGenericVariables
   43     5 [  4]         coreclr!MethodDesc::DoPrestub
    4     0 [  5]           coreclr!StressLog::LogOn
   79     9 [  4]         coreclr!MethodDesc::DoPrestub
  103     0 [  5]           coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
  222     0 [  6]             coreclr!ReadyToRunInfo::GetEntryPoint
   24     0 [  7]               coreclr!CrstBase::Enter
   10     0 [  8]                 ntdll!RtlEnterCriticalSection
   32    10 [  7]               coreclr!CrstBase::Enter
  404    42 [  6]             coreclr!ReadyToRunInfo::GetEntryPoint
   19     0 [  7]               ntdll!RtlLeaveCriticalSection
  426    61 [  6]             coreclr!ReadyToRunInfo::GetEntryPoint
   11     0 [  7]               ntdll!LdrpDispatchUserCallTarget
   19     0 [  7]               coreclr!Debugger::JITComplete
  447    91 [  6]             coreclr!ReadyToRunInfo::GetEntryPoint
  120   538 [  5]           coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   11     0 [  6]             ntdll!LdrpDispatchUserCallTarget
   29     0 [  6]             coreclr!PrepareCodeConfig::SetNativeCode
  138   578 [  5]           coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
    7     0 [  6]             coreclr!DACNotifyCompilationFinished
    8     0 [  7]               coreclr!JITNotifications::JITNotifications
    9     8 [  6]             coreclr!DACNotifyCompilationFinished
    4     0 [  7]               coreclr!JITNotifications::IsActive
   13    12 [  6]             coreclr!DACNotifyCompilationFinished
  230   603 [  5]           coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   15     0 [  6]             coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
   19     0 [  7]               coreclr!CrstBase::Enter
   10     0 [  8]                 ntdll!RtlEnterCriticalSection
   27    10 [  7]               coreclr!CrstBase::Enter
   51    37 [  6]             coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
   19     0 [  7]               ntdll!RtlLeaveCriticalSection
   63    56 [  6]             coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
  234   722 [  5]           coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
    6     0 [  6]             coreclr!__security_check_cookie
  244   728 [  5]           coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   86   981 [  4]         coreclr!MethodDesc::DoPrestub
   81     0 [  5]           coreclr!MethodDesc::DoBackpatch
   96  1062 [  4]         coreclr!MethodDesc::DoPrestub
  114  1162 [  3]       coreclr!PreStubWorker
    1     0 [  4]         coreclr!ThePreStubPatch
    1     0 [  4]         coreclr!ThePreStubPatchLabel
  130  1164 [  3]       coreclr!PreStubWorker
    1     0 [  4]         KERNEL32!SetLastErrorStub
   15     0 [  4]         ntdll!RtlSetLastWin32Error
    6     0 [  5]           ntdll!_security_check_cookie
   17     6 [  4]         ntdll!RtlSetLastWin32Error
  141  1188 [  3]       coreclr!PreStubWorker
   38  1329 [  2]     coreclr!ThePreStub
    1     0 [  2]     0x00007ffa`d21f00c0
    2     0 [  2]     System_Console!System.Console.get_Out
    4     0 [  3]       System_Console
   23     0 [  3]       coreclr!DelayLoad_Helper
   38     0 [  4]         coreclr!DynamicHelperWorker
   11     0 [  5]           ntdll!LdrpDispatchUserCallTarget
    4     0 [  5]           coreclr!Frame::GetReturnAddress
   11     0 [  6]             ntdll!LdrpDispatchUserCallTarget
    4     0 [  6]             coreclr!TransitionFrame::GetReturnAddressPtr
   11     0 [  7]               ntdll!LdrpDispatchUserCallTarget
    2     0 [  7]               coreclr!MulticastFrame::GetFunction
    7    13 [  6]             coreclr!TransitionFrame::GetReturnAddressPtr
   11    31 [  5]           coreclr!Frame::GetReturnAddress
   72    53 [  4]         coreclr!DynamicHelperWorker
  107     0 [  5]           coreclr!DynamicHelperFixup
   76     0 [  6]             coreclr!SigPointer::GetTypeHandleThrowing
    5     0 [  7]               coreclr!CorSigUncompressToken
   19     0 [  8]                 coreclr!CorSigUncompressData
   18    19 [  7]               coreclr!CorSigUncompressToken
  104    37 [  6]             coreclr!SigPointer::GetTypeHandleThrowing
   68     0 [  7]               coreclr!ClassLoader::LoadTypeDefOrRefThrowing
  120   105 [  6]             coreclr!SigPointer::GetTypeHandleThrowing
    6     0 [  7]               coreclr!__security_check_cookie
  131   111 [  6]             coreclr!SigPointer::GetTypeHandleThrowing
  111   242 [  5]           coreclr!DynamicHelperFixup
   15     0 [  6]             coreclr!MethodTable::EnsureInstanceActive
   13     0 [  7]               coreclr!DomainAssembly::EnsureLoadLevel
   30    13 [  6]             coreclr!MethodTable::EnsureInstanceActive
   13     0 [  7]               coreclr!DomainAssembly::EnsureLoadLevel
   43    26 [  6]             coreclr!MethodTable::EnsureInstanceActive
  113   311 [  5]           coreclr!DynamicHelperFixup
   39     0 [  6]             coreclr!MethodTable::CheckRunClassInitThrowing
   32     0 [  7]               coreclr!DomainLocalModule::PopulateClass
   24     0 [  8]                 coreclr!CrstBase::Enter
   10     0 [  9]                   ntdll!RtlEnterCriticalSection
   32    10 [  8]                 coreclr!CrstBase::Enter
   37    42 [  7]               coreclr!DomainLocalModule::PopulateClass
   13     0 [  8]                 coreclr!DomainLocalModule::GetClassFlags
   56    55 [  7]               coreclr!DomainLocalModule::PopulateClass
   12     0 [  8]                 coreclr!DomainLocalModule::SetClassFlags
    6     0 [  9]                   coreclr!MethodTable::GetTypeDefRid
   21     6 [  8]                 coreclr!DomainLocalModule::SetClassFlags
   59    82 [  7]               coreclr!DomainLocalModule::PopulateClass
    5     0 [  8]                 coreclr!CrstBase::Leave
   19     0 [  9]                   ntdll!RtlLeaveCriticalSection
   11    19 [  8]                 coreclr!CrstBase::Leave
   67   112 [  7]               coreclr!DomainLocalModule::PopulateClass
   51   179 [  6]             coreclr!MethodTable::CheckRunClassInitThrowing
   29     0 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
    5     0 [  8]                 coreclr!MethodTable::GetModule
   33     5 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
   13     0 [  8]                 coreclr!DomainAssembly::EnsureLoadLevel
   39    18 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
    4     0 [  8]                 coreclr!StressLog::LogOn
   49    22 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
   29     0 [  8]                 coreclr!CrstBase::Enter
   10     0 [  9]                   ntdll!RtlEnterCriticalSection
   41    10 [  8]                 coreclr!CrstBase::Enter
  107    73 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
   22     0 [  8]                 ntdll!RtlAllocateHeap
   62     0 [  8]                 ntdll!RtlpAllocateHeapInternal
   37     0 [  9]                   ntdll!RtlpAllocateHeap
   19     0 [ 10]                     ntdll!RtlDebugAllocateHeap
   12     0 [ 11]                       ntdll!RtlpCheckHeapSignature
   44    12 [ 10]                     ntdll!RtlDebugAllocateHeap
   10     0 [ 11]                       ntdll!RtlEnterCriticalSection
   50    22 [ 10]                     ntdll!RtlDebugAllocateHeap
   18     0 [ 11]                       ntdll!RtlpValidateHeap
   14     0 [ 12]                         ntdll!RtlpValidateHeapHeaders
   37    14 [ 11]                       ntdll!RtlpValidateHeap
   54    73 [ 10]                     ntdll!RtlDebugAllocateHeap
   22     0 [ 11]                       ntdll!RtlAllocateHeap
   62     0 [ 11]                       ntdll!RtlpAllocateHeapInternal
  103     0 [ 12]                         ntdll!RtlpAllocateHeap
   10     0 [ 13]                           ntdll!RtlpGetLFHContext
  273    10 [ 12]                         ntdll!RtlpAllocateHeap
   74     0 [ 13]                           ntdll!RtlpHeapRemoveListEntry
  297    84 [ 12]                         ntdll!RtlpAllocateHeap
   46     0 [ 13]                           ntdll!RtlCompareMemoryUlong
  397   130 [ 12]                         ntdll!RtlpAllocateHeap
    7     0 [ 13]                           ntdll!RtlpGetExtraStuffPointer
  438   137 [ 12]                         ntdll!RtlpAllocateHeap
   89   575 [ 11]                       ntdll!RtlpAllocateHeapInternal
   59   759 [ 10]                     ntdll!RtlDebugAllocateHeap
   14     0 [ 11]                       ntdll!RtlpValidateHeapHeaders
   80   773 [ 10]                     ntdll!RtlDebugAllocateHeap
    7     0 [ 11]                       ntdll!RtlpGetExtraStuffPointer
  128   780 [ 10]                     ntdll!RtlDebugAllocateHeap
   48   908 [  9]                   ntdll!RtlpAllocateHeap
   89   956 [  8]                 ntdll!RtlpAllocateHeapInternal
  115  1140 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
   18     0 [  8]                 coreclr!ListLockEntryBase<void *>::ListLockEntryBase<void *>
   32     0 [  9]                   ntdll!RtlInitializeCriticalSection
    6     0 [ 10]                     ntdll!_security_check_cookie
   36     6 [  9]                   ntdll!RtlInitializeCriticalSection
   41    42 [  8]                 coreclr!ListLockEntryBase<void *>::ListLockEntryBase<void *>
  130  1223 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
    5     0 [  8]                 coreclr!CrstBase::Leave
   19     0 [  9]                   ntdll!RtlLeaveCriticalSection
   11    19 [  8]                 coreclr!CrstBase::Leave
  137  1253 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
   19     0 [  8]                 coreclr!CrstBase::Enter
   10     0 [  9]                   ntdll!RtlEnterCriticalSection
   27    10 [  8]                 coreclr!CrstBase::Enter
  148  1290 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
    5     0 [  8]                 coreclr!CrstBase::Leave
   19     0 [  9]                   ntdll!RtlLeaveCriticalSection
   11    19 [  8]                 coreclr!CrstBase::Leave
  150  1320 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
    7     0 [  8]                 coreclr!ListLockEntryBase<void *>::FinishDeadlockAwareEnter
   29     0 [  9]                   coreclr!CrstBase::Enter
   10     0 [ 10]                     ntdll!RtlEnterCriticalSection
   41    10 [  9]                   coreclr!CrstBase::Enter
   22    51 [  8]                 coreclr!ListLockEntryBase<void *>::FinishDeadlockAwareEnter
  178  1393 [  7]               coreclr!MethodTable::DoRunClassInitThrowing
   37     0 [  8]                 coreclr!MethodTable::RunClassInitEx
   15     0 [  9]                   coreclr!MethodTable::EnsureInstanceActive
   13     0 [ 10]                     coreclr!DomainAssembly::EnsureLoadLevel
   30    13 [  9]                   coreclr!MethodTable::EnsureInstanceActive
   13     0 [ 10]                     coreclr!DomainAssembly::EnsureLoadLevel
   43    26 [  9]                   coreclr!MethodTable::EnsureInstanceActive
   41    69 [  8]                 coreclr!MethodTable::RunClassInitEx
    4     0 [  9]                   coreclr!StressLog::LogOn
   52    73 [  8]                 coreclr!MethodTable::RunClassInitEx
   16     0 [  9]                   coreclr!MethodTable::GetSlotPtrRaw
   67    89 [  8]                 coreclr!MethodTable::RunClassInitEx
   25     0 [  9]                   coreclr!DispatchCallSimple
    7     0 [ 10]                     coreclr!DispatchCallDebuggerWrapper
   17     0 [ 11]                       coreclr!CallDescrWorkerWithHandler
   45     0 [ 11]                       coreclr!CallDescrWorkerInternal
    1     0 [ 12]                         0x00007ffa`d21f09f0
    1     0 [ 12]                         0x00007ffa`d21f09f6
    1     0 [ 12]                         0x00007ffa`d21f09fd
   20     0 [ 12]                         coreclr!ThePreStub
   11     0 [ 13]                           coreclr!PreStubWorker
    1     0 [ 14]                             KERNEL32!GetLastErrorStub
    3     0 [ 14]                             KERNELBASE!GetLastError
  103     4 [ 13]                           coreclr!PreStubWorker
   33     0 [ 14]                             coreclr!MethodDesc::DoPrestub
    5     0 [ 15]                               coreclr!MethodTable::ContainsGenericVariables
   43     5 [ 14]                             coreclr!MethodDesc::DoPrestub
    4     0 [ 15]                               coreclr!StressLog::LogOn
   79     9 [ 14]                             coreclr!MethodDesc::DoPrestub
  103     0 [ 15]                               coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
  220     0 [ 16]                                 coreclr!ReadyToRunInfo::GetEntryPoint
    6     0 [ 17]                                   coreclr!Module::GetReadyToRunImage
  229     6 [ 16]                                 coreclr!ReadyToRunInfo::GetEntryPoint
   15     0 [ 17]                                   coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
    7     0 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   21     0 [ 19]                                       coreclr!NibbleReader::ReadNibble
   17    21 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   25    38 [ 17]                                   coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
   15     0 [ 18]                                     coreclr!PEDecoder::GetRvaData
   28    53 [ 17]                                   coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
    7     0 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   21     0 [ 19]                                       coreclr!NibbleReader::ReadNibble
   14    21 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   21     0 [ 19]                                       coreclr!NibbleReader::ReadNibble
   24    42 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   35   119 [ 17]                                   coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
   31     0 [ 18]                                     coreclr!Module::FixupNativeEntry
   70     0 [ 19]                                       coreclr!LoadDynamicInfoEntry
   68     0 [ 20]                                         coreclr!SigPointer::GetTypeHandleThrowing
    6     0 [ 21]                                           coreclr!__security_check_cookie
   79     6 [ 20]                                         coreclr!SigPointer::GetTypeHandleThrowing
   83    85 [ 19]                                       coreclr!LoadDynamicInfoEntry
   13     0 [ 20]                                         coreclr!DomainAssembly::EnsureLoadLevel
   99    98 [ 19]                                       coreclr!LoadDynamicInfoEntry
    6     0 [ 20]                                         coreclr!__security_check_cookie
  108   104 [ 19]                                       coreclr!LoadDynamicInfoEntry
   43   212 [ 18]                                     coreclr!Module::FixupNativeEntry
   39   374 [ 17]                                   coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
    7     0 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   21     0 [ 19]                                       coreclr!NibbleReader::ReadNibble
   17    21 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   43   412 [ 17]                                   coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
    7     0 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   21     0 [ 19]                                       coreclr!NibbleReader::ReadNibble
   17    21 [ 18]                                     coreclr!NibbleReader::ReadEncodedU32
   57   450 [ 17]                                   coreclr!Module::FixupDelayListAux<Module *,int (__cdecl Module::*)(READYTORUN_IMPORT_SECTION *,unsigned __int64,unsigned __int64 *,int)>
  246   513 [ 16]                                 coreclr!ReadyToRunInfo::GetEntryPoint
   24     0 [ 17]                                   coreclr!CrstBase::Enter
   10     0 [ 18]                                     ntdll!RtlEnterCriticalSection
   32    10 [ 17]                                   coreclr!CrstBase::Enter
  433   555 [ 16]                                 coreclr!ReadyToRunInfo::GetEntryPoint
   19     0 [ 17]                                   ntdll!RtlLeaveCriticalSection
  455   574 [ 16]                                 coreclr!ReadyToRunInfo::GetEntryPoint
   11     0 [ 17]                                   ntdll!LdrpDispatchUserCallTarget
   19     0 [ 17]                                   coreclr!Debugger::JITComplete
  476   604 [ 16]                                 coreclr!ReadyToRunInfo::GetEntryPoint
  120  1080 [ 15]                               coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
   29     0 [ 16]                                 coreclr!PrepareCodeConfig::SetNativeCode
  138  1120 [ 15]                               coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
    7     0 [ 16]                                 coreclr!DACNotifyCompilationFinished
    8     0 [ 17]                                   coreclr!JITNotifications::JITNotifications
    9     8 [ 16]                                 coreclr!DACNotifyCompilationFinished
    4     0 [ 17]                                   coreclr!JITNotifications::IsActive
   13    12 [ 16]                                 coreclr!DACNotifyCompilationFinished
  247  1145 [ 15]                               coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   15     0 [ 16]                                 coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
   19     0 [ 17]                                   coreclr!CrstBase::Enter
   10     0 [ 18]                                     ntdll!RtlEnterCriticalSection
   27    10 [ 17]                                   coreclr!CrstBase::Enter
   51    37 [ 16]                                 coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
   19     0 [ 17]                                   ntdll!RtlLeaveCriticalSection
   63    56 [ 16]                                 coreclr!TieredCompilationManager::HandleCallCountingForFirstCall
  251  1264 [ 15]                               coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
    6     0 [ 16]                                 coreclr!__security_check_cookie
  261  1270 [ 15]                               coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary
   86  1540 [ 14]                             coreclr!MethodDesc::DoPrestub
   97     0 [ 15]                               coreclr!MethodDesc::DoBackpatch
   96  1637 [ 14]                             coreclr!MethodDesc::DoPrestub
  114  1737 [ 13]                           coreclr!PreStubWorker
    1     0 [ 14]                             coreclr!ThePreStubPatch
    1     0 [ 14]                             coreclr!ThePreStubPatchLabel
  130  1739 [ 13]                           coreclr!PreStubWorker
    1     0 [ 14]                             KERNEL32!SetLastErrorStub
   15     0 [ 14]                             ntdll!RtlSetLastWin32Error
    6     0 [ 15]                               ntdll!_security_check_cookie
   17     6 [ 14]                             ntdll!RtlSetLastWin32Error
  141  1763 [ 13]                           coreclr!PreStubWorker
   38  1904 [ 12]                         coreclr!ThePreStub
    1     0 [ 12]                         0x00007ffa`d21f09f0
    3     0 [ 12]                         System_Console!System.Console.WriteLine
    4     0 [ 13]                           System_Console
   23     0 [ 13]                           coreclr!DelayLoad_Helper
   38     0 [ 14]                             coreclr!DynamicHelperWorker
   11     0 [ 15]                               ntdll!LdrpDispatchUserCallTarget
    4     0 [ 15]                               coreclr!Frame::GetReturnAddress
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
    4     0 [ 16]                                 coreclr!TransitionFrame::GetReturnAddressPtr
   11     0 [ 17]                                   ntdll!LdrpDispatchUserCallTarget
    2     0 [ 17]                                   coreclr!MulticastFrame::GetFunction
    7    13 [ 16]                                 coreclr!TransitionFrame::GetReturnAddressPtr
   11    31 [ 15]                               coreclr!Frame::GetReturnAddress
   72    53 [ 14]                             coreclr!DynamicHelperWorker
  110     0 [ 15]                               coreclr!DynamicHelperFixup
   68     0 [ 16]                                 coreclr!SigPointer::GetTypeHandleThrowing
    6     0 [ 17]                                   coreclr!__security_check_cookie
   79     6 [ 16]                                 coreclr!SigPointer::GetTypeHandleThrowing
  114    85 [ 15]                               coreclr!DynamicHelperFixup
   15     0 [ 16]                                 coreclr!MethodTable::EnsureInstanceActive
   13     0 [ 17]                                   coreclr!DomainAssembly::EnsureLoadLevel
   29    13 [ 16]                                 coreclr!MethodTable::EnsureInstanceActive
  134   127 [ 15]                               coreclr!DynamicHelperFixup
   17     0 [ 16]                                 coreclr!CEEInfo::getNewHelperStatic
    7     0 [ 17]                                   coreclr!TrackAllocationsEnabled
    4     0 [ 18]                                     coreclr!ETW::TypeSystemLog::IsHeapAllocEventEnabled
   13     4 [ 17]                                   coreclr!TrackAllocationsEnabled
   23    17 [ 16]                                 coreclr!CEEInfo::getNewHelperStatic
  144   167 [ 15]                               coreclr!DynamicHelperFixup
   11     0 [ 16]                                 coreclr!DynamicHelpers::CreateHelper
    9     0 [ 17]                                   coreclr!LoaderAllocator::GetDynamicHelpersHeap
   17     9 [ 16]                                 coreclr!DynamicHelpers::CreateHelper
   19     0 [ 17]                                   coreclr!CodeFragmentHeap::RealAllocAlignedMem
   29     0 [ 18]                                     coreclr!CrstBase::Enter
   10     0 [ 19]                                       ntdll!RtlEnterCriticalSection
   37    10 [ 18]                                     coreclr!CrstBase::Enter
   58    47 [ 17]                                   coreclr!CodeFragmentHeap::RealAllocAlignedMem
    1     0 [ 18]                                     coreclr!operator delete
    7     0 [ 18]                                     coreclr!operator delete[]
    1     0 [ 19]                                       KERNEL32!HeapFreeStub
   21     0 [ 19]                                       ntdll!RtlFreeHeap
   45     0 [ 20]                                         ntdll!RtlpFreeHeapInternal
   35     0 [ 21]                                           ntdll!RtlpFreeHeap
   19     0 [ 22]                                             ntdll!RtlDebugFreeHeap
   12     0 [ 23]                                               ntdll!RtlpCheckHeapSignature
   29    12 [ 22]                                             ntdll!RtlDebugFreeHeap
   10     0 [ 23]                                               ntdll!RtlEnterCriticalSection
   35    22 [ 22]                                             ntdll!RtlDebugFreeHeap
   18     0 [ 23]                                               ntdll!RtlpValidateHeap
   14     0 [ 24]                                                 ntdll!RtlpValidateHeapHeaders
   37    14 [ 23]                                               ntdll!RtlpValidateHeap
   44    73 [ 22]                                             ntdll!RtlDebugFreeHeap
   56     0 [ 23]                                               ntdll!RtlpValidateHeapEntry
   54     0 [ 24]                                                 ntdll!RtlpCheckBusyBlockTail
   28     0 [ 25]                                                   ntdll!RtlCompareMemory
   64    28 [ 24]                                                 ntdll!RtlpCheckBusyBlockTail
   74    92 [ 23]                                               ntdll!RtlpValidateHeapEntry
   57   239 [ 22]                                             ntdll!RtlDebugFreeHeap
   21     0 [ 23]                                               ntdll!RtlFreeHeap
   45     0 [ 24]                                                 ntdll!RtlpFreeHeapInternal
  193     0 [ 25]                                                   ntdll!RtlpFreeHeap
   16     0 [ 26]                                                     ntdll!RtlpFindEntry
  119     0 [ 27]                                                       ntdll!RtlpHeapFindListLookupEntry
   23   119 [ 26]                                                     ntdll!RtlpFindEntry
  239   142 [ 25]                                                   ntdll!RtlpFreeHeap
   60     0 [ 26]                                                     ntdll!RtlpHeapAddListEntry
  270   202 [ 25]                                                   ntdll!RtlpFreeHeap
   55   472 [ 24]                                                 ntdll!RtlpFreeHeapInternal
    8     0 [ 25]                                                   ntdll!RtlpHpStackLoggingEnabled
   69   480 [ 24]                                                 ntdll!RtlpFreeHeapInternal
   28   549 [ 23]                                               ntdll!RtlFreeHeap
   61   816 [ 22]                                             ntdll!RtlDebugFreeHeap
   14     0 [ 23]                                               ntdll!RtlpValidateHeapHeaders
   64   830 [ 22]                                             ntdll!RtlDebugFreeHeap
   18     0 [ 23]                                               ntdll!RtlpValidateHeap
   14     0 [ 24]                                                 ntdll!RtlpValidateHeapHeaders
   37    14 [ 23]                                               ntdll!RtlpValidateHeap
   86   881 [ 22]                                             ntdll!RtlDebugFreeHeap
   47   967 [ 21]                                           ntdll!RtlpFreeHeap
   55  1014 [ 20]                                         ntdll!RtlpFreeHeapInternal
    8     0 [ 21]                                           ntdll!RtlpHpStackLoggingEnabled
   69  1022 [ 20]                                         ntdll!RtlpFreeHeapInternal
   28  1091 [ 19]                                       ntdll!RtlFreeHeap
   10  1120 [ 18]                                     coreclr!operator delete[]
   80  1178 [ 17]                                   coreclr!CodeFragmentHeap::RealAllocAlignedMem
   22     0 [ 18]                                     ntdll!RtlAllocateHeap
   62     0 [ 18]                                     ntdll!RtlpAllocateHeapInternal
   37     0 [ 19]                                       ntdll!RtlpAllocateHeap
   19     0 [ 20]                                         ntdll!RtlDebugAllocateHeap
   12     0 [ 21]                                           ntdll!RtlpCheckHeapSignature
   44    12 [ 20]                                         ntdll!RtlDebugAllocateHeap
   10     0 [ 21]                                           ntdll!RtlEnterCriticalSection
   50    22 [ 20]                                         ntdll!RtlDebugAllocateHeap
   18     0 [ 21]                                           ntdll!RtlpValidateHeap
   14     0 [ 22]                                             ntdll!RtlpValidateHeapHeaders
   37    14 [ 21]                                           ntdll!RtlpValidateHeap
   54    73 [ 20]                                         ntdll!RtlDebugAllocateHeap
   22     0 [ 21]                                           ntdll!RtlAllocateHeap
   62     0 [ 21]                                           ntdll!RtlpAllocateHeapInternal
  103     0 [ 22]                                             ntdll!RtlpAllocateHeap
   10     0 [ 23]                                               ntdll!RtlpGetLFHContext
  271    10 [ 22]                                             ntdll!RtlpAllocateHeap
   66     0 [ 23]                                               ntdll!RtlpHeapRemoveListEntry
  295    76 [ 22]                                             ntdll!RtlpAllocateHeap
   22     0 [ 23]                                               ntdll!RtlCompareMemoryUlong
  383    98 [ 22]                                             ntdll!RtlpAllocateHeap
    7     0 [ 23]                                               ntdll!RtlpGetExtraStuffPointer
  424   105 [ 22]                                             ntdll!RtlpAllocateHeap
   89   529 [ 21]                                           ntdll!RtlpAllocateHeapInternal
   59   713 [ 20]                                         ntdll!RtlDebugAllocateHeap
   14     0 [ 21]                                           ntdll!RtlpValidateHeapHeaders
   80   727 [ 20]                                         ntdll!RtlDebugAllocateHeap
    7     0 [ 21]                                           ntdll!RtlpGetExtraStuffPointer
  128   734 [ 20]                                         ntdll!RtlDebugAllocateHeap
   48   862 [ 19]                                       ntdll!RtlpAllocateHeap
   89   910 [ 18]                                     ntdll!RtlpAllocateHeapInternal
  101  2199 [ 17]                                   coreclr!CodeFragmentHeap::RealAllocAlignedMem
   19     0 [ 18]                                     ntdll!RtlLeaveCriticalSection
  125  2218 [ 17]                                   coreclr!CodeFragmentHeap::RealAllocAlignedMem
   25  2352 [ 16]                                 coreclr!DynamicHelpers::CreateHelper
   22     0 [ 17]                                   coreclr!ExecutableAllocator::MapRW
   28     0 [ 18]                                     coreclr!ClrEnterCriticalSection
   10     0 [ 19]                                       ntdll!RtlEnterCriticalSection
   36    10 [ 18]                                     coreclr!ClrEnterCriticalSection
   47    46 [ 17]                                   coreclr!ExecutableAllocator::MapRW
    9     0 [ 18]                                     coreclr!memcpy
   56    55 [ 17]                                   coreclr!ExecutableAllocator::MapRW
    5     0 [ 18]                                     coreclr!CrstBase::Leave
   19     0 [ 19]                                       ntdll!RtlLeaveCriticalSection
   23    19 [ 18]                                     coreclr!CrstBase::Leave
   69    97 [ 17]                                   coreclr!ExecutableAllocator::MapRW
   39  2518 [ 16]                                 coreclr!DynamicHelpers::CreateHelper
   28     0 [ 17]                                   coreclr!rel32UsingJumpStub
   51  2546 [ 16]                                 coreclr!DynamicHelpers::CreateHelper
   16     0 [ 17]                                   coreclr!memset
   54  2562 [ 16]                                 coreclr!DynamicHelpers::CreateHelper
   19     0 [ 17]                                   coreclr!ExecutableWriterHolderNoLog<unsigned char>::Unmap
   28     0 [ 18]                                     coreclr!ClrEnterCriticalSection
   10     0 [ 19]                                       ntdll!RtlEnterCriticalSection
   36    10 [ 18]                                     coreclr!ClrEnterCriticalSection
   27    46 [ 17]                                   coreclr!ExecutableWriterHolderNoLog<unsigned char>::Unmap
   25     0 [ 18]                                     coreclr!ExecutableAllocator::RemoveRWBlock
   37    71 [ 17]                                   coreclr!ExecutableWriterHolderNoLog<unsigned char>::Unmap
    5     0 [ 18]                                     coreclr!CrstBase::Leave
   19     0 [ 19]                                       ntdll!RtlLeaveCriticalSection
   23    19 [ 18]                                     coreclr!CrstBase::Leave
   44   113 [ 17]                                   coreclr!ExecutableWriterHolderNoLog<unsigned char>::Unmap
   64  2719 [ 16]                                 coreclr!DynamicHelpers::CreateHelper
  163  2950 [ 15]                               coreclr!DynamicHelperFixup
    6     0 [ 16]                                 coreclr!__security_check_cookie
  172  2956 [ 15]                               coreclr!DynamicHelperFixup
  100  3181 [ 14]                             coreclr!DynamicHelperWorker
   43  3281 [ 13]                           coreclr!DelayLoad_Helper
(e30.1774): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
00007ffa`d2121548 0000            add     byte ptr [rax],al ds:00007ffa`d2121548=00

不过,为了日后继续查找原因方便,我又单独写了一段小程序,其功能简单到只打印Hello字符串,如下面列表所示:

{    static void Main()
    {
        Console.WriteLine("Hello");
        System.Diagnostics.Debugger.Break();
        Console.WriteLine("Hello");
        Console.ReadKey();
    }

调试时,首先g,直到第一次顺利打印出Hello,然后通过k命令找到返回Main的地址Core!BasicGrammar.Program.Main+0x2c,执行:

!u Core!BasicGrammar.Program.Main

此时观察Main方法,得到部分汇编代码如下:

00007ffc`7382194a b9a0049a02     mov     ecx, 29A04A0h
00007ffc`7382194f ff15732e0d00   call    qword ptr [7FFC738F47C8h]
00007ffc`73821955 90             nop     
00007ffc`73821956 ff153c310d00   call    qword ptr [7FFC738F4A98h]
00007ffc`7382195c 90             nop     
00007ffc`7382195d b9a0049a02     mov     ecx, 29A04A0h
00007ffc`73821962 ff15602e0d00   call    qword ptr [7FFC738F47C8h]
00007ffc`73821968 90             nop     
00007ffc`73821969 488d4de8       lea     rcx, [rbp-18h]
00007ffc`7382196d ff151d270d00   call    qword ptr [7FFC738F4090h]
00007ffc`73821973 90             nop 

此时重新运行wt,因为Console.WriteLine此时已成功JIT,所以执行时不会再出现access violation,可以成功列出完整调用序列如下:

0:000> wt 00007ffc`73821968
    2     0 [  0] Core!BasicGrammar.Program.Main
    4     0 [  1]   System_Console!System.Console.WriteLine
    4     0 [  2]     System_Console
   22     0 [  2]     coreclr!DelayLoad_MethodCall
   14     0 [  3]       coreclr!ExternalMethodFixupWorker
    1     0 [  4]         KERNEL32!GetLastErrorStub
    3     0 [  4]         KERNELBASE!GetLastError
   35     4 [  3]       coreclr!ExternalMethodFixupWorker
    4     0 [  4]         coreclr!Frame::GetReturnAddress
   11     0 [  5]           ntdll!LdrpDispatchUserCallTarget
    4     0 [  5]           coreclr!TransitionFrame::GetReturnAddressPtr
   11     0 [  6]             ntdll!LdrpDispatchUserCallTarget
    2     0 [  6]             coreclr!MulticastFrame::GetFunction
    7    13 [  5]           coreclr!TransitionFrame::GetReturnAddressPtr
   11    31 [  4]         coreclr!Frame::GetReturnAddress
  171    46 [  3]       coreclr!ExternalMethodFixupWorker
   13     0 [  4]         coreclr!MethodDesc::CheckRestore
  196    59 [  3]       coreclr!ExternalMethodFixupWorker
   13     0 [  4]         coreclr!DomainAssembly::EnsureLoadLevel
  216    72 [  3]       coreclr!ExternalMethodFixupWorker
   13     0 [  4]         coreclr!DomainAssembly::EnsureLoadLevel
  531    85 [  3]       coreclr!ExternalMethodFixupWorker
    1     0 [  4]         KERNEL32!SetLastErrorStub
   15     0 [  4]         ntdll!RtlSetLastWin32Error
    6     0 [  5]           ntdll!_security_check_cookie
   17     6 [  4]         ntdll!RtlSetLastWin32Error
  541   109 [  3]       coreclr!ExternalMethodFixupWorker
   39   650 [  2]     coreclr!DelayLoad_MethodCall
    1     0 [  2]     coreclr!ExternalMethodFixupPatchLabel
    1     0 [  2]     0x00007ffc`738f00c0
    2     0 [  2]     System_Console!System.Console.get_Out
    1     0 [  3]       0x00007ffc`73821558
    1     0 [  3]       0x00007ffc`73821562
    7     2 [  2]     System_Console!System.Console.get_Out
    9   704 [  1]   System_Console!System.Console.WriteLine
    1     0 [  2]     0x00007ffc`738211e0
    1     0 [  2]     0x00007ffc`738211e3
    1     0 [  2]     0x00007ffc`738211e7
   16     0 [  2]     System_Private_CoreLib!System.IO.TextWriter.SyncTextWriter.WriteLine
   34     0 [  3]       coreclr!JIT_MonEnterWorker_Portable
   21    34 [  2]     System_Private_CoreLib!System.IO.TextWriter.SyncTextWriter.WriteLine
    1     0 [  3]       0x00007ffc`738211e0
    1     0 [  3]       0x00007ffc`738211e3
    1     0 [  3]       0x00007ffc`738211e7
   54     0 [  3]       System_Private_CoreLib!System.IO.StreamWriter.WriteLine
    1     0 [  4]         0x00007ffc`738c1b78
   24     0 [  4]         System_Private_CoreLib!System.Buffer.Memmove
  106    25 [  3]       System_Private_CoreLib!System.IO.StreamWriter.WriteLine
    1     0 [  4]         0x00007ffc`738fbbe8
   38     0 [  4]         System_Private_CoreLib!System.IO.StreamWriter.Flush
    1     0 [  5]           0x00007ffc`738211a0
    1     0 [  5]           0x00007ffc`738211a3
    1     0 [  5]           0x00007ffc`738211a7
    8     0 [  5]           System_Console!System.Text.OSEncoding.GetMaxByteCount
    1     0 [  6]             0x00007ffc`73918f48
    5     0 [  6]             System_Private_CoreLib!System.ArgumentOutOfRangeException.ThrowIfNegative
   16     6 [  5]           System_Console!System.Text.OSEncoding.GetMaxByteCount
   65    25 [  4]         System_Private_CoreLib!System.IO.StreamWriter.Flush
    1     0 [  5]           0x00007ffc`738211b0
    1     0 [  5]           0x00007ffc`738211b3
    1     0 [  5]           0x00007ffc`738211b7
   29     0 [  5]           System_Private_CoreLib!System.Text.Encoder.GetBytes
    1     0 [  6]             0x00007ffc`738211c0
    1     0 [  6]             0x00007ffc`738211c3
    1     0 [  6]             0x00007ffc`738211c7
   18     0 [  6]             System_Console!System.Text.OSEncoder.GetBytes
    1     0 [  7]               0x00007ffc`73919650
    5     0 [  7]               System_Private_CoreLib!System.ArgumentNullException.ThrowIfNull
   22     6 [  6]             System_Console!System.Text.OSEncoder.GetBytes
    1     0 [  7]               0x00007ffc`73919650
    5     0 [  7]               System_Private_CoreLib!System.ArgumentNullException.ThrowIfNull
   26    12 [  6]             System_Console!System.Text.OSEncoder.GetBytes
    1     0 [  7]               0x00007ffc`73918f48
    5     0 [  7]               System_Private_CoreLib!System.ArgumentOutOfRangeException.ThrowIfNegative
   30    18 [  6]             System_Console!System.Text.OSEncoder.GetBytes
    1     0 [  7]               0x00007ffc`73918f48
    5     0 [  7]               System_Private_CoreLib!System.ArgumentOutOfRangeException.ThrowIfNegative
   41    24 [  6]             System_Console!System.Text.OSEncoder.GetBytes
    4     0 [  7]               System_Console
   22     0 [  7]               coreclr!DelayLoad_MethodCall
   14     0 [  8]                 coreclr!ExternalMethodFixupWorker
    1     0 [  9]                   KERNEL32!GetLastErrorStub
    3     0 [  9]                   KERNELBASE!GetLastError
   35     4 [  8]                 coreclr!ExternalMethodFixupWorker
    4     0 [  9]                   coreclr!Frame::GetReturnAddress
   11     0 [ 10]                     ntdll!LdrpDispatchUserCallTarget
    4     0 [ 10]                     coreclr!TransitionFrame::GetReturnAddressPtr
   11     0 [ 11]                       ntdll!LdrpDispatchUserCallTarget
    2     0 [ 11]                       coreclr!MulticastFrame::GetFunction
    7    13 [ 10]                     coreclr!TransitionFrame::GetReturnAddressPtr
   11    31 [  9]                   coreclr!Frame::GetReturnAddress
  141    46 [  8]                 coreclr!ExternalMethodFixupWorker
   17     0 [  9]                   coreclr!CorSigUncompressBigData
  158    63 [  8]                 coreclr!ExternalMethodFixupWorker
   20     0 [  9]                   coreclr!MemberLoader::GetDescFromMemberRef
    3     0 [ 10]                     coreclr!LookupMap<unsigned __int64>::GetElement
    7     0 [ 11]                       coreclr!LookupMapBase::GetElementPtr
   18     7 [ 10]                     coreclr!LookupMap<unsigned __int64>::GetElement
   30    25 [  9]                   coreclr!MemberLoader::GetDescFromMemberRef
   13     0 [ 10]                     coreclr!MethodDesc::CheckRestore
   47    38 [  9]                   coreclr!MemberLoader::GetDescFromMemberRef
  166   148 [  8]                 coreclr!ExternalMethodFixupWorker
   26     0 [  9]                   coreclr!MethodDesc::EnsureActive
   13     0 [ 10]                     coreclr!DomainAssembly::EnsureLoadLevel
   45    13 [  9]                   coreclr!MethodDesc::EnsureActive
  471   206 [  8]                 coreclr!ExternalMethodFixupWorker
    1     0 [  9]                   KERNEL32!SetLastErrorStub
   15     0 [  9]                   ntdll!RtlSetLastWin32Error
    6     0 [ 10]                     ntdll!_security_check_cookie
   17     6 [  9]                   ntdll!RtlSetLastWin32Error
  481   230 [  8]                 coreclr!ExternalMethodFixupWorker
   39   711 [  7]               coreclr!DelayLoad_MethodCall
    1     0 [  7]               coreclr!ExternalMethodFixupPatchLabel
    1     0 [  7]               0x00007ffc`737a2370
    6     0 [  7]               System_Private_CoreLib!System.Char.IsHighSurrogate
   58   786 [  6]             System_Console!System.Text.OSEncoder.GetBytes
    1     0 [  7]               0x00007ffc`73821150
    1     0 [  7]               0x00007ffc`73821153
    1     0 [  7]               0x00007ffc`73821157
    2     0 [  7]               System_Private_CoreLib!System.Text.Encoding.get_CodePage
   64   791 [  6]             System_Console!System.Text.OSEncoder.GetBytes
    4     0 [  7]               System_Console
   22     0 [  7]               coreclr!DelayLoad_MethodCall
   14     0 [  8]                 coreclr!ExternalMethodFixupWorker
    1     0 [  9]                   KERNEL32!GetLastErrorStub
    3     0 [  9]                   KERNELBASE!GetLastError
   35     4 [  8]                 coreclr!ExternalMethodFixupWorker
    4     0 [  9]                   coreclr!Frame::GetReturnAddress
   11     0 [ 10]                     ntdll!LdrpDispatchUserCallTarget
    4     0 [ 10]                     coreclr!TransitionFrame::GetReturnAddressPtr
   11     0 [ 11]                       ntdll!LdrpDispatchUserCallTarget
    2     0 [ 11]                       coreclr!MulticastFrame::GetFunction
    7    13 [ 10]                     coreclr!TransitionFrame::GetReturnAddressPtr
   11    31 [  9]                   coreclr!Frame::GetReturnAddress
  137    46 [  8]                 coreclr!ExternalMethodFixupWorker
   17     0 [  9]                   coreclr!CorSigUncompressBigData
  170    63 [  8]                 coreclr!ExternalMethodFixupWorker
   13     0 [  9]                   coreclr!MethodDesc::CheckRestore
  195    76 [  8]                 coreclr!ExternalMethodFixupWorker
   13     0 [  9]                   coreclr!DomainAssembly::EnsureLoadLevel
  215    89 [  8]                 coreclr!ExternalMethodFixupWorker
   13     0 [  9]                   coreclr!DomainAssembly::EnsureLoadLevel
  530   102 [  8]                 coreclr!ExternalMethodFixupWorker
    1     0 [  9]                   KERNEL32!SetLastErrorStub
   15     0 [  9]                   ntdll!RtlSetLastWin32Error
    6     0 [ 10]                     ntdll!_security_check_cookie
   17     6 [  9]                   ntdll!RtlSetLastWin32Error
  540   126 [  8]                 coreclr!ExternalMethodFixupWorker
   39   666 [  7]               coreclr!DelayLoad_MethodCall
    1     0 [  7]               coreclr!ExternalMethodFixupPatchLabel
    1     0 [  7]               0x00007ffc`738f8138
   26     0 [  7]               System_Console!System.Text.OSEncoding.WideCharToMultiByte
   22     0 [  8]                 coreclr!JIT_PInvokeBegin
   32    22 [  7]               System_Console!System.Text.OSEncoding.WideCharToMultiByte
    1     0 [  8]                 KERNEL32!WideCharToMultiByteStub
   88     0 [  8]                 KERNELBASE!WideCharToMultiByte
  138     0 [  9]                   KERNELBASE!GetMBNoDefault
   98   138 [  8]                 KERNELBASE!WideCharToMultiByte
   35   259 [  7]               System_Console!System.Text.OSEncoding.WideCharToMultiByte
   12     0 [  8]                 coreclr!JIT_PInvokeEnd
   48   271 [  7]               System_Console!System.Text.OSEncoding.WideCharToMultiByte
   76  1821 [  6]             System_Console!System.Text.OSEncoder.GetBytes
   33  1900 [  5]           System_Private_CoreLib!System.Text.Encoder.GetBytes
   79  1961 [  4]         System_Private_CoreLib!System.IO.StreamWriter.Flush
    1     0 [  5]           0x00007ffc`738211f0
    1     0 [  5]           0x00007ffc`738211f3
    1     0 [  5]           0x00007ffc`738211f7
    5     0 [  5]           System_Console!System.ConsolePal.WindowsConsoleStream.Write
    4     0 [  6]             System_Console
   22     0 [  6]             coreclr!DelayLoad_MethodCall
   14     0 [  7]               coreclr!ExternalMethodFixupWorker
    1     0 [  8]                 KERNEL32!GetLastErrorStub
    3     0 [  8]                 KERNELBASE!GetLastError
   35     4 [  7]               coreclr!ExternalMethodFixupWorker
    4     0 [  8]                 coreclr!Frame::GetReturnAddress
   11     0 [  9]                   ntdll!LdrpDispatchUserCallTarget
    4     0 [  9]                   coreclr!TransitionFrame::GetReturnAddressPtr
   11     0 [ 10]                     ntdll!LdrpDispatchUserCallTarget
    2     0 [ 10]                     coreclr!MulticastFrame::GetFunction
    7    13 [  9]                   coreclr!TransitionFrame::GetReturnAddressPtr
   11    31 [  8]                 coreclr!Frame::GetReturnAddress
  137    46 [  7]               coreclr!ExternalMethodFixupWorker
   17     0 [  8]                 coreclr!CorSigUncompressBigData
  170    63 [  7]               coreclr!ExternalMethodFixupWorker
   13     0 [  8]                 coreclr!MethodDesc::CheckRestore
  195    76 [  7]               coreclr!ExternalMethodFixupWorker
   13     0 [  8]                 coreclr!DomainAssembly::EnsureLoadLevel
  227    89 [  7]               coreclr!ExternalMethodFixupWorker
   13     0 [  8]                 coreclr!DomainAssembly::EnsureLoadLevel
  542   102 [  7]               coreclr!ExternalMethodFixupWorker
    1     0 [  8]                 KERNEL32!SetLastErrorStub
   15     0 [  8]                 ntdll!RtlSetLastWin32Error
    6     0 [  9]                   ntdll!_security_check_cookie
   17     6 [  8]                 ntdll!RtlSetLastWin32Error
  552   126 [  7]               coreclr!ExternalMethodFixupWorker
   39   678 [  6]             coreclr!DelayLoad_MethodCall
    1     0 [  6]             coreclr!ExternalMethodFixupPatchLabel
    1     0 [  6]             0x00007ffc`738f94b8
   13     0 [  6]             System_Console!System.ConsolePal.WindowsConsoleStream.WriteFileNative
    4     0 [  7]               System_Console
   22     0 [  7]               coreclr!DelayLoad_MethodCall
   14     0 [  8]                 coreclr!ExternalMethodFixupWorker
    1     0 [  9]                   KERNEL32!GetLastErrorStub
    3     0 [  9]                   KERNELBASE!GetLastError
   35     4 [  8]                 coreclr!ExternalMethodFixupWorker
    4     0 [  9]                   coreclr!Frame::GetReturnAddress
   11     0 [ 10]                     ntdll!LdrpDispatchUserCallTarget
    4     0 [ 10]                     coreclr!TransitionFrame::GetReturnAddressPtr
   11     0 [ 11]                       ntdll!LdrpDispatchUserCallTarget
    2     0 [ 11]                       coreclr!MulticastFrame::GetFunction
    7    13 [ 10]                     coreclr!TransitionFrame::GetReturnAddressPtr
   11    31 [  9]                   coreclr!Frame::GetReturnAddress
  147    46 [  8]                 coreclr!ExternalMethodFixupWorker
   29     0 [  9]                   coreclr!ZapSig::DecodeMethod
   19     0 [ 10]                     coreclr!CorSigUncompressData
   49    19 [  9]                   coreclr!ZapSig::DecodeMethod
   19     0 [ 10]                     coreclr!CorSigUncompressData
   76    38 [  9]                   coreclr!ZapSig::DecodeMethod
   20     0 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
    3     0 [ 11]                       coreclr!LookupMap<unsigned __int64>::GetElement
    7     0 [ 12]                         coreclr!LookupMapBase::GetElementPtr
   18     7 [ 11]                       coreclr!LookupMap<unsigned __int64>::GetElement
   30    25 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
   11     0 [ 11]                       ntdll!LdrpDispatchUserCallTarget
    3     0 [ 11]                       coreclr!Module::GetMDImport
   37    39 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
   11     0 [ 11]                       ntdll!LdrpDispatchUserCallTarget
   25     0 [ 11]                       coreclr!MDInternalRO::GetParentOfMemberRef
   56    75 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
   11     0 [ 11]                       ntdll!LdrpDispatchUserCallTarget
   12     0 [ 11]                       coreclr!MDInternalRO::GetTypeSpecFromToken
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   12     0 [ 12]                         coreclr!MDInternalRO::IsValidToken
   35    23 [ 11]                       coreclr!MDInternalRO::GetTypeSpecFromToken
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   31     0 [ 12]                         coreclr!StgBlobPoolReadOnly::GetBlob
   45    65 [ 11]                       coreclr!MDInternalRO::GetTypeSpecFromToken
   77   196 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
   85     0 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
   40     0 [ 12]                         coreclr!SigPointer::GetGenericInstType
    5     0 [ 13]                           coreclr!CorSigUncompressToken
   24     0 [ 14]                             coreclr!CorSigUncompressData
   18    24 [ 13]                           coreclr!CorSigUncompressToken
   69    42 [ 12]                         coreclr!SigPointer::GetGenericInstType
   73     0 [ 13]                           coreclr!ClassLoader::LoadTypeDefOrRefThrowing
  105   115 [ 12]                         coreclr!SigPointer::GetGenericInstType
  130   220 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
   19     0 [ 12]                         coreclr!CorSigUncompressData
  151   239 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
   14     0 [ 12]                         coreclr!__chkstk
  191   253 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
   64     0 [ 12]                         coreclr!SigPointer::GetTypeHandleThrowing
    6     0 [ 13]                           coreclr!__security_check_cookie
   75     6 [ 12]                         coreclr!SigPointer::GetTypeHandleThrowing
  201   334 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
   29     0 [ 12]                         coreclr!SigParser::SkipExactlyOne
  249   363 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
   63     0 [ 12]                         coreclr!ClassLoader::LoadTypeDefThrowing
    6     0 [ 13]                           coreclr!__security_check_cookie
   73     6 [ 12]                         coreclr!ClassLoader::LoadTypeDefThrowing
  327   442 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
    7     0 [ 12]                         coreclr!TypeHandle::GetLoaderModule
  479   449 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
    6     0 [ 12]                         coreclr!__security_check_cookie
  490   455 [ 11]                       coreclr!SigPointer::GetTypeHandleThrowing
   96  1141 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
   11     0 [ 11]                       ntdll!LdrpDispatchUserCallTarget
   38     0 [ 11]                       coreclr!MDInternalRO::GetNameAndSigOfMemberRef
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   31     0 [ 12]                         coreclr!StgBlobPoolReadOnly::GetBlob
   61    42 [ 11]                       coreclr!MDInternalRO::GetNameAndSigOfMemberRef
  126  1255 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
   38     0 [ 11]                       coreclr!MemberLoader::FindMethod
   45     0 [ 12]                         coreclr!SimpleRWLock::EnterRead
  174    45 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   18     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetNumMethods
  188    74 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  245   108 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  254   141 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
    9     0 [ 12]                         ucrtbase!strcmp
  268   161 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  325   195 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  334   228 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   42     0 [ 12]                         ucrtbase!strcmp
  348   281 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  405   315 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  414   348 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
    9     0 [ 12]                         ucrtbase!strcmp
  428   368 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  485   402 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  494   435 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
    9     0 [ 12]                         ucrtbase!strcmp
  508   455 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  565   489 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  574   522 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
    9     0 [ 12]                         ucrtbase!strcmp
  588   542 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  645   576 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  654   609 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
    9     0 [ 12]                         ucrtbase!strcmp
  668   629 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  725   663 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  734   696 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
    9     0 [ 12]                         ucrtbase!strcmp
  748   716 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  805   750 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  814   783 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
    9     0 [ 12]                         ucrtbase!strcmp
  828   803 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  885   837 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  894   870 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
    9     0 [ 12]                         ucrtbase!strcmp
  908   890 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   23     0 [ 12]                         coreclr!MethodTable::MethodDataObject::GetDeclMethodDesc
  965   924 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   22     0 [ 12]                         coreclr!MDInternalRO::GetNameOfMethodDef
  974   957 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   78     0 [ 12]                         ucrtbase!strcmp
 1050  1046 [ 11]                       coreclr!MemberLoader::FindMethod
   11     0 [ 12]                         ntdll!LdrpDispatchUserCallTarget
   28     0 [ 12]                         coreclr!MDInternalRO::GetSigOfMethodDef
   11     0 [ 13]                           ntdll!LdrpDispatchUserCallTarget
   31     0 [ 13]                           coreclr!StgBlobPoolReadOnly::GetBlob
   40    42 [ 12]                         coreclr!MDInternalRO::GetSigOfMethodDef
 1088  1139 [ 11]                       coreclr!MemberLoader::FindMethod
   91     0 [ 12]                         coreclr!MetaSig::CompareMethodSigs
   10     0 [ 13]                           coreclr!TokenPairList::TokenPairList
  109    10 [ 12]                         coreclr!MetaSig::CompareMethodSigs
   73     0 [ 13]                           coreclr!MetaSig::CompareElementType
   10     0 [ 14]                             coreclr!CorSigUncompressToken_EndPtr
    5     0 [ 15]                               coreclr!CorSigUncompressToken
   19     0 [ 16]                                 coreclr!CorSigUncompressData
   18    19 [ 15]                               coreclr!CorSigUncompressToken
   19    37 [ 14]                             coreclr!CorSigUncompressToken_EndPtr
   79    56 [ 13]                           coreclr!MetaSig::CompareElementType
   10     0 [ 14]                             coreclr!CorSigUncompressToken_EndPtr
    5     0 [ 15]                               coreclr!CorSigUncompressToken
   24     0 [ 16]                                 coreclr!CorSigUncompressData
   18    24 [ 15]                               coreclr!CorSigUncompressToken
   19    42 [ 14]                             coreclr!CorSigUncompressToken_EndPtr
   92   117 [ 13]                           coreclr!MetaSig::CompareElementType
   29     0 [ 14]                             coreclr!MetaSig::CompareTypeDefOrRefOrSpec
   20     0 [ 15]                               coreclr!CompareTypeTokens
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
    3     0 [ 16]                                 coreclr!Module::GetMDImport
   27    14 [ 15]                               coreclr!CompareTypeTokens
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
   26     0 [ 16]                                 coreclr!MDInternalRO::IsValidToken
   33    51 [ 15]                               coreclr!CompareTypeTokens
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
    3     0 [ 16]                                 coreclr!Module::GetMDImport
   40    65 [ 15]                               coreclr!CompareTypeTokens
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
   25     0 [ 16]                                 coreclr!MDInternalRO::IsValidToken
   56   101 [ 15]                               coreclr!CompareTypeTokens
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
   30     0 [ 16]                                 coreclr!MDInternalRO::GetNameOfTypeRef
   75   142 [ 15]                               coreclr!CompareTypeTokens
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
   42     0 [ 16]                                 coreclr!MDInternalRO::GetNameOfTypeDef
   81   195 [ 15]                               coreclr!CompareTypeTokens
  108     0 [ 16]                                 ucrtbase!strcmp
   86   303 [ 15]                               coreclr!CompareTypeTokens
   59     0 [ 16]                                 ucrtbase!strcmp
   98   362 [ 15]                               coreclr!CompareTypeTokens
   11     0 [ 16]                                 ntdll!LdrpDispatchUserCallTarget
   23     0 [ 16]                                 coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
  139   396 [ 15]                               coreclr!CompareTypeTokens
   40     0 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
   15     0 [ 17]                                   coreclr!Assembly::FindModuleByTypeRef
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
    3     0 [ 18]                                     coreclr!Module::GetMDImport
   26    14 [ 17]                                   coreclr!Assembly::FindModuleByTypeRef
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   26     0 [ 18]                                     coreclr!MDInternalRO::IsValidToken
   36    51 [ 17]                                   coreclr!Assembly::FindModuleByTypeRef
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   23     0 [ 18]                                     coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
   51    85 [ 17]                                   coreclr!Assembly::FindModuleByTypeRef
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   30     0 [ 18]                                     coreclr!MDInternalRO::IsValidToken
   65   126 [ 17]                                   coreclr!Assembly::FindModuleByTypeRef
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
    3     0 [ 18]                                     coreclr!Module::GetMDImport
   80   140 [ 17]                                   coreclr!Assembly::FindModuleByTypeRef
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   29     0 [ 18]                                     coreclr!MDInternalRO::GetAssemblyRefProps
   11     0 [ 19]                                       ntdll!LdrpDispatchUserCallTarget
   31     0 [ 19]                                       coreclr!StgBlobPoolReadOnly::GetBlob
   64    42 [ 18]                                     coreclr!MDInternalRO::GetAssemblyRefProps
   96   257 [ 17]                                   coreclr!Assembly::FindModuleByTypeRef
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   70     0 [ 18]                                     coreclr!Module::GetAssemblyIfLoaded
  107   338 [ 17]                                   coreclr!Assembly::FindModuleByTypeRef
   47   445 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
   11     0 [ 17]                                   ntdll!LdrpDispatchUserCallTarget
    3     0 [ 17]                                   coreclr!Module::GetMDImport
   55   459 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
   11     0 [ 17]                                   ntdll!LdrpDispatchUserCallTarget
   30     0 [ 17]                                   coreclr!MDInternalRO::GetNameOfTypeRef
   97   500 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
   47     0 [ 17]                                   coreclr!ClassLoader::GetClassValue
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
    3     0 [ 18]                                     coreclr!Module::GetMDImport
   54    14 [ 17]                                   coreclr!ClassLoader::GetClassValue
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   23     0 [ 18]                                     coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
  384    48 [ 17]                                   coreclr!ClassLoader::GetClassValue
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   41     0 [ 18]                                     coreclr!MDInternalRO::GetExportedTypeProps
  397   100 [ 17]                                   coreclr!ClassLoader::GetClassValue
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   13     0 [ 18]                                     coreclr!ConstructKeyCallbackCompare::UseKeys
  102     0 [ 19]                                       ucrtbase!strcmp
   20   102 [ 18]                                     coreclr!ConstructKeyCallbackCompare::UseKeys
   57     0 [ 19]                                       ucrtbase!strcmp
   29   159 [ 18]                                     coreclr!ConstructKeyCallbackCompare::UseKeys
  418   299 [ 17]                                   coreclr!ClassLoader::GetClassValue
  122  1217 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
   22     0 [ 17]                                   coreclr!Assembly::FindModuleByExportedType
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   41     0 [ 18]                                     coreclr!MDInternalRO::GetExportedTypeProps
   29    52 [ 17]                                   coreclr!Assembly::FindModuleByExportedType
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   30     0 [ 18]                                     coreclr!MDInternalRO::IsValidToken
   44    93 [ 17]                                   coreclr!Assembly::FindModuleByExportedType
   11     0 [ 18]                                     ntdll!LdrpDispatchUserCallTarget
   87     0 [ 18]                                     coreclr!Module::LoadAssemblyImpl
   51   191 [ 17]                                   coreclr!Assembly::FindModuleByExportedType
  164  1459 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
   35     0 [ 17]                                   coreclr!ClassLoader::GetClassValue
   36     0 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   11     0 [ 19]                                       ntdll!LdrpDispatchUserCallTarget
    3     0 [ 19]                                       coreclr!Module::GetMDImport
   53    14 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   11     0 [ 19]                                       ntdll!LdrpDispatchUserCallTarget
   30     0 [ 19]                                       coreclr!MDInternalRO::GetNameOfTypeRef
   61    55 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   11     0 [ 19]                                       ntdll!LdrpDispatchUserCallTarget
   23     0 [ 19]                                       coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
  724    89 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   11     0 [ 19]                                       ntdll!LdrpDispatchUserCallTarget
    3     0 [ 19]                                       coreclr!Module::GetMDImport
  737   103 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   11     0 [ 19]                                       ntdll!LdrpDispatchUserCallTarget
   30     0 [ 19]                                       coreclr!MDInternalRO::GetNameOfTypeRef
  751   144 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   11     0 [ 19]                                       ntdll!LdrpDispatchUserCallTarget
   42     0 [ 19]                                       coreclr!MDInternalRO::GetNameOfTypeDef
  757   197 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
  108     0 [ 19]                                       ucrtbase!strcmp
  763   305 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   59     0 [ 19]                                       ucrtbase!strcmp
  777   364 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   11     0 [ 19]                                       ntdll!LdrpDispatchUserCallTarget
   23     0 [ 19]                                       coreclr!MDInternalRO::GetResolutionScopeOfTypeRef
  821   398 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
    6     0 [ 19]                                       coreclr!__security_check_cookie
  831   404 [ 18]                                     coreclr!ReadyToRunInfo::TryLookupTypeTokenFromName
   58  1235 [ 17]                                   coreclr!ClassLoader::GetClassValue
  200  2752 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
  148  3348 [ 15]                               coreclr!CompareTypeTokens
   21     0 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
   11     0 [ 17]                                   ntdll!LdrpDispatchUserCallTarget
    2     0 [ 17]                                   coreclr!Module::IsFullModule
   41    13 [ 16]                                 coreclr!ClassLoader::ResolveTokenToTypeDefThrowing
  156  3402 [ 15]                               coreclr!CompareTypeTokens
   23     0 [ 16]                                 coreclr!CompareTypeTokens
  167  3425 [ 15]                               coreclr!CompareTypeTokens
   39  3592 [ 14]                             coreclr!MetaSig::CompareTypeDefOrRefOrSpec
  149  3748 [ 13]                           coreclr!MetaSig::CompareElementType
  127     0 [ 14]                             coreclr!MetaSig::CompareElementType
  164  3875 [ 13]                           coreclr!MetaSig::CompareElementType
  126  4049 [ 12]                         coreclr!MetaSig::CompareMethodSigs
 1106  5314 [ 11]                       coreclr!MemberLoader::FindMethod
  132  7675 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
   13     0 [ 11]                       coreclr!MethodDesc::CheckRestore
  156  7688 [ 10]                     coreclr!MemberLoader::GetDescFromMemberRef
  123  7882 [  9]                   coreclr!ZapSig::DecodeMethod
  115     0 [ 10]                     coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
   67     0 [ 11]                       coreclr!ExecutionManager::FindCodeRangeWithLock
  128    67 [ 10]                     coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
   11     0 [ 11]                       ntdll!LdrpDispatchUserCallTarget
   17     0 [ 11]                       coreclr!EEJitManager::JitCodeToMethodInfo
  156    95 [ 10]                     coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
   13     0 [ 11]                       coreclr!MethodDesc::CheckRestore
  173   108 [ 10]                     coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
    6     0 [ 11]                       coreclr!__security_check_cookie
  183   114 [ 10]                     coreclr!MethodDesc::FindOrCreateAssociatedMethodDesc
  133  8179 [  9]                   coreclr!ZapSig::DecodeMethod
    6     0 [ 10]                     coreclr!__security_check_cookie
  143  8185 [  9]                   coreclr!ZapSig::DecodeMethod
  182  8374 [  8]                 coreclr!ExternalMethodFixupWorker
   13     0 [  9]                   coreclr!DomainAssembly::EnsureLoadLevel
  208  8387 [  8]                 coreclr!ExternalMethodFixupWorker
   15     0 [  9]                   coreclr!MethodTable::EnsureInstanceActive
   13     0 [ 10]                     coreclr!DomainAssembly::EnsureLoadLevel
   29    13 [  9]                   coreclr!MethodTable::EnsureInstanceActive
  517  8429 [  8]                 coreclr!ExternalMethodFixupWorker
   17     0 [  9]                   coreclr!MethodTable::GetSlotPtrRaw
  549  8446 [  8]                 coreclr!ExternalMethodFixupWorker
    1     0 [  9]                   KERNEL32!SetLastErrorStub
   15     0 [  9]                   ntdll!RtlSetLastWin32Error
    6     0 [ 10]                     ntdll!_security_check_cookie
   17     6 [  9]                   ntdll!RtlSetLastWin32Error
  559  8470 [  8]                 coreclr!ExternalMethodFixupWorker
   39  9029 [  7]               coreclr!DelayLoad_MethodCall
    1     0 [  7]               coreclr!ExternalMethodFixupPatchLabel
    1     0 [  7]               0x00007ffc`738c87b0
    1     0 [  7]               0x00007ffc`73930a98
    1     0 [  7]               0x00007ffc`73930a9f
    1     0 [  7]               0x00007ffc`73930aa2
    1     0 [  7]               0x00007ffc`73930aa4
    5     0 [  7]               System_Private_CoreLib!System.ReadOnlySpan`1.GetPinnableReference
   23  9083 [  6]             System_Console!System.ConsolePal.WindowsConsoleStream.WriteFileNative
    1     0 [  7]               0x00007ffc`738f2c70
    1     0 [  7]               0x00007ffc`73930720
    1     0 [  7]               0x00007ffc`73930727
    1     0 [  7]               0x00007ffc`7393072a
    1     0 [  7]               0x00007ffc`7393072c
   19     0 [  7]               System_Console!Interop.Kernel32.WriteFile
    1     0 [  8]                 0x00007ffc`738fa7a8
    1     0 [  8]                 0x00007ffc`73930738
    1     0 [  8]                 0x00007ffc`7393073f
    1     0 [  8]                 0x00007ffc`73930742
    1     0 [  8]                 0x00007ffc`73930744
    4     0 [  8]                 System_Private_CoreLib!System.Runtime.InteropServices.Marshal.SetLastSystemError
    1     0 [  9]                   KERNEL32!SetLastErrorStub
   15     0 [  9]                   ntdll!RtlSetLastWin32Error
    6     0 [ 10]                     ntdll!_security_check_cookie
   17     6 [  9]                   ntdll!RtlSetLastWin32Error
   10    24 [  8]                 System_Private_CoreLib!System.Runtime.InteropServices.Marshal.SetLastSystemError
   31    39 [  7]               System_Console!Interop.Kernel32.WriteFile
   22     0 [  8]                 coreclr!JIT_PInvokeBegin
   37    61 [  7]               System_Console!Interop.Kernel32.WriteFile
    1     0 [  8]                 KERNEL32!WriteFile
   29     0 [  8]                 KERNELBASE!WriteFile
    6     0 [  9]                   ntdll!NtWriteFile
>> More than one level popped 8 -> 8
   45     6 [  8]                 KERNELBASE!WriteFile
   40   113 [  7]               System_Console!Interop.Kernel32.WriteFile
   12     0 [  8]                 coreclr!JIT_PInvokeEnd
   41   125 [  7]               System_Console!Interop.Kernel32.WriteFile
    1     0 [  8]                 0x00007ffc`738fa790
    1     0 [  8]                 0x00007ffc`73930750
    1     0 [  8]                 0x00007ffc`73930757
    1     0 [  8]                 0x00007ffc`7393075a
    1     0 [  8]                 0x00007ffc`7393075c
    7     0 [  8]                 System_Private_CoreLib!System.Runtime.InteropServices.Marshal.GetLastSystemError
    1     0 [  9]                   KERNEL32!GetLastErrorStub
    3     0 [  9]                   KERNELBASE!GetLastError
   11     4 [  8]                 System_Private_CoreLib!System.Runtime.InteropServices.Marshal.GetLastSystemError
   45   145 [  7]               System_Console!Interop.Kernel32.WriteFile
    7     0 [  8]                 coreclr!MarshalNative::SetLastPInvokeError
   56   152 [  7]               System_Console!Interop.Kernel32.WriteFile
   36  9296 [  6]             System_Console!System.ConsolePal.WindowsConsoleStream.WriteFileNative
    9 10055 [  5]           System_Console!System.ConsolePal.WindowsConsoleStream.Write
   85 12028 [  4]         System_Private_CoreLib!System.IO.StreamWriter.Flush
    1     0 [  5]           0x00007ffc`738211d0
    1     0 [  5]           0x00007ffc`738211d3
    1     0 [  5]           0x00007ffc`738211d7
    1     0 [  5]           0x00007ffc`73919e00
    1     0 [  5]           0x00007ffc`739309d8
    1     0 [  5]           0x00007ffc`739309df
    1     0 [  5]           0x00007ffc`739309e2
    1     0 [  5]           0x00007ffc`739309e4
    6     0 [  5]           System_Console!System.ConsolePal.WindowsConsoleStream.Flush
   99 12042 [  4]         System_Private_CoreLib!System.IO.StreamWriter.Flush
  120 12167 [  3]       System_Private_CoreLib!System.IO.StreamWriter.WriteLine
   24 12324 [  2]     System_Private_CoreLib!System.IO.TextWriter.SyncTextWriter.WriteLine
   33     0 [  3]       coreclr!JIT_MonExitWorker_Portable
   30 12357 [  2]     System_Private_CoreLib!System.IO.TextWriter.SyncTextWriter.WriteLine
   13 13094 [  1]   System_Console!System.Console.WriteLine

13109 instructions were executed in 13108 events (0 from other threads)

Function Name                               Invocations MinInst MaxInst AvgInst
0x00007ffc`737a2370                                   1       1       1       1
0x00007ffc`73821150                                   1       1       1       1
0x00007ffc`73821153                                   1       1       1       1
0x00007ffc`73821157                                   1       1       1       1
0x00007ffc`738211a0                                   1       1       1       1
0x00007ffc`738211a3                                   1       1       1       1
0x00007ffc`738211a7                                   1       1       1       1
0x00007ffc`738211b0                                   1       1       1       1
0x00007ffc`738211b3                                   1       1       1       1
0x00007ffc`738211b7                                   1       1       1       1
0x00007ffc`738211c0                                   1       1       1       1
0x00007ffc`738211c3                                   1       1       1       1
0x00007ffc`738211c7                                   1       1       1       1
0x00007ffc`738211d0                                   1       1       1       1
0x00007ffc`738211d3                                   1       1       1       1
0x00007ffc`738211d7                                   1       1       1       1
0x00007ffc`738211e0                                   2       1       1       1
0x00007ffc`738211e3                                   2       1       1       1
0x00007ffc`738211e7                                   2       1       1       1
0x00007ffc`738211f0                                   1       1       1       1
0x00007ffc`738211f3                                   1       1       1       1
0x00007ffc`738211f7                                   1       1       1       1
0x00007ffc`73821558                                   1       1       1       1
0x00007ffc`73821562                                   1       1       1       1
0x00007ffc`738c1b78                                   1       1       1       1
0x00007ffc`738c87b0                                   1       1       1       1
0x00007ffc`738f00c0                                   1       1       1       1
0x00007ffc`738f2c70                                   1       1       1       1
0x00007ffc`738f8138                                   1       1       1       1
0x00007ffc`738f94b8                                   1       1       1       1
0x00007ffc`738fa790                                   1       1       1       1
0x00007ffc`738fa7a8                                   1       1       1       1
0x00007ffc`738fbbe8                                   1       1       1       1
0x00007ffc`73918f48                                   3       1       1       1
0x00007ffc`73919650                                   2       1       1       1
0x00007ffc`73919e00                                   1       1       1       1
0x00007ffc`73930720                                   1       1       1       1
0x00007ffc`73930727                                   1       1       1       1
0x00007ffc`7393072a                                   1       1       1       1
0x00007ffc`7393072c                                   1       1       1       1
0x00007ffc`73930738                                   1       1       1       1
0x00007ffc`7393073f                                   1       1       1       1
0x00007ffc`73930742                                   1       1       1       1
0x00007ffc`73930744                                   1       1       1       1
0x00007ffc`73930750                                   1       1       1       1
0x00007ffc`73930757                                   1       1       1       1
0x00007ffc`7393075a                                   1       1       1       1
0x00007ffc`7393075c                                   1       1       1       1
0x00007ffc`739309d8                                   1       1       1       1
0x00007ffc`739309df                                   1       1       1       1
0x00007ffc`739309e2                                   1       1       1       1
0x00007ffc`739309e4                                   1       1       1       1
0x00007ffc`73930a98                                   1       1       1       1
0x00007ffc`73930a9f                                   1       1       1       1
0x00007ffc`73930aa2                                   1       1       1       1
0x00007ffc`73930aa4                                   1       1       1       1
Core!BasicGrammar.Program.Main                        1       2       2       2
KERNEL32!GetLastErrorStub                             6       1       1       1
KERNEL32!SetLastErrorStub                             6       1       1       1
KERNEL32!WideCharToMultiByteStub                      1       1       1       1
KERNEL32!WriteFile                                    1       1       1       1
KERNELBASE!GetLastError                               6       3       3       3
KERNELBASE!GetMBNoDefault                             1     138     138     138
KERNELBASE!WideCharToMultiByte                        1      98      98      98
KERNELBASE!WriteFile                                  1      45      45      45
System_Console                                        5       4       4       4
System_Console!Interop.Kernel32.WriteFile             1      56      56      56
System_Console!System.Console.WriteLine               1      13      13      13
System_Console!System.Console.get_Out                 1       7       7       7
System_Console!System.ConsolePal.WindowsConsole       1       6       6       6
System_Console!System.ConsolePal.WindowsConsole       1       9       9       9
System_Console!System.ConsolePal.WindowsConsole       1      36      36      36
System_Console!System.Text.OSEncoder.GetBytes         1      76      76      76
System_Console!System.Text.OSEncoding.GetMaxByt       1      16      16      16
System_Console!System.Text.OSEncoding.WideCharT       1      48      48      48
System_Private_CoreLib!System.ArgumentNullExcep       2       5       5       5
System_Private_CoreLib!System.ArgumentOutOfRang       3       5       5       5
System_Private_CoreLib!System.Buffer.Memmove          1      24      24      24
System_Private_CoreLib!System.Char.IsHighSurrog       1       6       6       6
System_Private_CoreLib!System.IO.StreamWriter.F       1      99      99      99
System_Private_CoreLib!System.IO.StreamWriter.W       1     120     120     120
System_Private_CoreLib!System.IO.TextWriter.Syn       1      30      30      30
System_Private_CoreLib!System.ReadOnlySpan`1.Ge       1       5       5       5
System_Private_CoreLib!System.Runtime.InteropSe       1      11      11      11
System_Private_CoreLib!System.Runtime.InteropSe       1      10      10      10
System_Private_CoreLib!System.Text.Encoder.GetB       1      33      33      33
System_Private_CoreLib!System.Text.Encoding.get       1       2       2       2
coreclr!Assembly::FindModuleByExportedType            1      51      51      51
coreclr!Assembly::FindModuleByTypeRef                 1     107     107     107
coreclr!ClassLoader::GetClassValue                    2      58     418     238
coreclr!ClassLoader::LoadTypeDefOrRefThrowing         1      73      73      73
coreclr!ClassLoader::LoadTypeDefThrowing              1      73      73      73
coreclr!ClassLoader::ResolveTokenToTypeDefThrow       2      41     200     120
coreclr!CompareTypeTokens                             2      23     167      95
coreclr!ConstructKeyCallbackCompare::UseKeys          1      29      29      29
coreclr!CorSigUncompressBigData                       3      17      17      17
coreclr!CorSigUncompressData                          6      19      24      20
coreclr!CorSigUncompressToken                         3      18      18      18
coreclr!CorSigUncompressToken_EndPtr                  2      19      19      19
coreclr!DelayLoad_MethodCall                          5      39      39      39
coreclr!DomainAssembly::EnsureLoadLevel               9      13      13      13
coreclr!EEJitManager::JitCodeToMethodInfo             1      17      17      17
coreclr!ExecutionManager::FindCodeRangeWithLock       1      67      67      67
coreclr!ExternalMethodFixupPatchLabel                 5       1       1       1
coreclr!ExternalMethodFixupWorker                     5     481     559     534
coreclr!Frame::GetReturnAddress                       5      11      11      11
coreclr!JIT_MonEnterWorker_Portable                   1      34      34      34
coreclr!JIT_MonExitWorker_Portable                    1      33      33      33
coreclr!JIT_PInvokeBegin                              2      22      22      22
coreclr!JIT_PInvokeEnd                                2      12      12      12
coreclr!LookupMap<unsigned __int64>::GetElement       2      18      18      18
coreclr!LookupMapBase::GetElementPtr                  2       7       7       7
coreclr!MDInternalRO::GetAssemblyRefProps             1      64      64      64
coreclr!MDInternalRO::GetExportedTypeProps            2      41      41      41
coreclr!MDInternalRO::GetNameAndSigOfMemberRef        1      61      61      61
coreclr!MDInternalRO::GetNameOfMethodDef             10      22      22      22
coreclr!MDInternalRO::GetNameOfTypeDef                2      42      42      42
coreclr!MDInternalRO::GetNameOfTypeRef                4      30      30      30
coreclr!MDInternalRO::GetParentOfMemberRef            1      25      25      25
coreclr!MDInternalRO::GetResolutionScopeOfTypeR       5      23      23      23
coreclr!MDInternalRO::GetSigOfMethodDef               1      40      40      40
coreclr!MDInternalRO::GetTypeSpecFromToken            1      45      45      45
coreclr!MDInternalRO::IsValidToken                    6      12      30      24
coreclr!MarshalNative::SetLastPInvokeError            1       7       7       7
coreclr!MemberLoader::FindMethod                      1    1106    1106    1106
coreclr!MemberLoader::GetDescFromMemberRef            2      47     156     101
coreclr!MetaSig::CompareElementType                   2     127     164     145
coreclr!MetaSig::CompareMethodSigs                    1     126     126     126
coreclr!MetaSig::CompareTypeDefOrRefOrSpec            1      39      39      39
coreclr!MethodDesc::CheckRestore                      6      13      13      13
coreclr!MethodDesc::EnsureActive                      1      45      45      45
coreclr!MethodDesc::FindOrCreateAssociatedMetho       1     183     183     183
coreclr!MethodTable::EnsureInstanceActive             1      29      29      29
coreclr!MethodTable::GetSlotPtrRaw                    1      17      17      17
coreclr!MethodTable::MethodDataObject::GetDeclM      10      23      23      23
coreclr!MethodTable::MethodDataObject::GetNumMe       1      18      18      18
coreclr!Module::GetAssemblyIfLoaded                   1      70      70      70
coreclr!Module::GetMDImport                           9       3       3       3
coreclr!Module::IsFullModule                          1       2       2       2
coreclr!Module::LoadAssemblyImpl                      1      87      87      87
coreclr!MulticastFrame::GetFunction                   5       2       2       2
coreclr!ReadyToRunInfo::TryLookupTypeTokenFromN       1     831     831     831
coreclr!SigParser::SkipExactlyOne                     1      29      29      29
coreclr!SigPointer::GetGenericInstType                1     105     105     105
coreclr!SigPointer::GetTypeHandleThrowing             2      75     490     282
coreclr!SimpleRWLock::EnterRead                       1      45      45      45
coreclr!StgBlobPoolReadOnly::GetBlob                  4      31      31      31
coreclr!TokenPairList::TokenPairList                  1      10      10      10
coreclr!TransitionFrame::GetReturnAddressPtr          5       7       7       7
coreclr!TypeHandle::GetLoaderModule                   1       7       7       7
coreclr!ZapSig::DecodeMethod                          1     143     143     143
coreclr!__chkstk                                      1      14      14      14
coreclr!__security_check_cookie                       6       6       6       6
ntdll!LdrpDispatchUserCallTarget                     83      11      11      11
ntdll!NtWriteFile                                     1       6       6       6
ntdll!RtlSetLastWin32Error                            6      17      17      17
ntdll!_security_check_cookie                          6       6       6       6
ucrtbase!strcmp                                      16       9     108      42

1 system call was executed

Calls  System Call
    1  ntdll!NtWriteFile

Core!BasicGrammar.Program.Main+0x38:
00007ffc`73821968 90              nop

以上为Console.WriteLine(“Hello”)语句成功运行的完整用户态调用列表,虽然早有心理准备,但还是被最终结果惊到了:没料到如此简单的一条语句,实际上仅用户态机器指令数就达到13109条(见下面单行列表),而且整个调用深度竟然达到了19级。另外通过该列表可以发现,在Console.WriteLine已经被JIT以后,执行过程中coreclr的参与依旧十分频繁,有接近70个CoreClr模块内方法参与了执行。

13109 instructions were executed in 13108 events (0 from other threads)

我进行过一次简单测试:调试一个c++程序,main代码运行结束后,进入了ucrtbased!exit方法时我运行了wt命令,结果列表长度高达20878行,简单按一半计算,需要调用1万多个子程序。

这是一段小插曲,现在话题收回来:

为了不因这种崩溃影响文章内容的完整性,我简单修改了一下源程序,注释掉了第10行的显示调用 Console.WriteLine(sum),然后重新开始调试。当然了,重新开始时我也使用了一些其他命令,目的是为了引导大家举一反三。

进入for循环

点restart重新启动调试,然后点击Go,让程序停到Debugger.Break()。
这次我们使用一个新命令:!sos.clrstack,该命令可以得到托管栈回朔,并且可以找到Main的入口点地址,在本例中就是00007ffac6c31958。然后就可以使用!u命令列出Main的汇编列表,再根据汇编列表找到我们希望程序运行到的目标点,比如第8行:

E:\test\a\Core\Program.cs @ 8:
00007ffa`c6c31968 90 nop
然后就可以使用比如

0:000> g 00007ffa`c6c31968

完整记录如下:

0:000> !clrstack
OS Thread Id: 0x5670 (0)
        Child SP               IP Call Site
00000000001CEB58 00007ffbc8667a72 [HelperMethodFrame: 00000000001ceb58] System.Diagnostics.Debugger.BreakInternal()
00000000001CEC60 00007ffb2044550a System.Diagnostics.Debugger.Break() [/_/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs @ 18]
00000000001CEC90 00007ffac6c31958 BasicGrammar.Program.Main() [E:\test\a\Core\Program.cs @ 5]

0:000> !U /d 00007ffac6c31958
Normal JIT generated code
BasicGrammar.Program.Main()
ilAddr is 00000000024C2050 pImport is 00000000057F7B40
Begin 00007FFAC6C31930, size 64

E:\test\a\Core\Program.cs @ 4:
00007ffa`c6c31930 55              push    rbp
00007ffa`c6c31931 4883ec30        sub     rsp,30h
00007ffa`c6c31935 488d6c2430      lea     rbp,[rsp+30h]
00007ffa`c6c3193a 33c0            xor     eax,eax
00007ffa`c6c3193c 488945f4        mov     qword ptr [rbp-0Ch],rax
00007ffa`c6c31940 8945fc          mov     dword ptr [rbp-4],eax
00007ffa`c6c31943 833ddec9080000  cmp     dword ptr [00007ffa`c6cbe328],0
00007ffa`c6c3194a 7405            je      Core!BasicGrammar.Program.Main+0x21 (00007ffa`c6c31951)
00007ffa`c6c3194c e85facc85f      call    coreclr!JIT_DbgIsJustMyCode (00007ffb`268bc5b0)
00007ffa`c6c31951 90              nop

E:\test\a\Core\Program.cs @ 5:
00007ffa`c6c31952 ff15d8df0a00    call    qword ptr [00007ffa`c6cdf930]
>>> 00007ffa`c6c31958 90              nop

E:\test\a\Core\Program.cs @ 6:
00007ffa`c6c31959 33c0            xor     eax,eax
00007ffa`c6c3195b 8945fc          mov     dword ptr [rbp-4],eax

E:\test\a\Core\Program.cs @ 7:
00007ffa`c6c3195e c745f801000000  mov     dword ptr [rbp-8],1
00007ffa`c6c31965 90              nop
00007ffa`c6c31966 eb13            jmp     Core!BasicGrammar.Program.Main+0x4b (00007ffa`c6c3197b)

E:\test\a\Core\Program.cs @ 8:
00007ffa`c6c31968 90              nop

E:\test\a\Core\Program.cs @ 9:
00007ffa`c6c31969 8b45fc          mov     eax,dword ptr [rbp-4]
00007ffa`c6c3196c 0345f8          add     eax,dword ptr [rbp-8]
00007ffa`c6c3196f 8945fc          mov     dword ptr [rbp-4],eax

E:\test\a\Core\Program.cs @ 11:
00007ffa`c6c31972 90              nop

E:\test\a\Core\Program.cs @ 7:
00007ffa`c6c31973 8b45f8          mov     eax,dword ptr [rbp-8]
00007ffa`c6c31976 ffc0            inc     eax
00007ffa`c6c31978 8945f8          mov     dword ptr [rbp-8],eax
00007ffa`c6c3197b 33c0            xor     eax,eax
00007ffa`c6c3197d 837df864        cmp     dword ptr [rbp-8],64h
00007ffa`c6c31981 0f9ec0          setle   al
00007ffa`c6c31984 8945f4          mov     dword ptr [rbp-0Ch],eax
00007ffa`c6c31987 837df400        cmp     dword ptr [rbp-0Ch],0
00007ffa`c6c3198b 75db            jne     Core!BasicGrammar.Program.Main+0x38 (00007ffa`c6c31968)

E:\test\a\Core\Program.cs @ 12:
00007ffa`c6c3198d 90              nop
00007ffa`c6c3198e 4883c430        add     rsp,30h
00007ffa`c6c31992 5d              pop     rbp
00007ffa`c6c31993 c3              ret

0:000> g 00007ffa`c6c31968
Core!BasicGrammar.Program.Main+0x38:
00007ffa`c6c31968 90              nop

条件断点

刚进入第8行的时候,sum = 0,i = 1。此时通过多次点击Step over,单步运行几次程序,如图所示,此刻已经 i=6, sum = 5
在这里插入图片描述
但是,这样调试循环程序太麻烦了,假设我们希望现在正常执行循环,直到 i = 98的时候再断下,要如何做?这时就可以使用条件断点。
下面命令的含义是:如果dwo(@rbp-8) > 0n97,那么就断到00007ffa`c6c31968位置,否则继续执行(gc)。
下完条件断点以后,输入g命令继续执行,程序完美断到了00007ffac6c31968位置,而且此时查看rbp-8地址的内容(也就是变量 i )是62h,也就是98。

0:000> bp 00007ffa`c6c31968 "j (dwo(@rbp-8) > 0n97) ''; 'gc'"
0:000> g
Core!BasicGrammar.Program.Main+0x38:
00007ffa`c6c31968 90              nop
0:000> ? dwo(@rbp-8)
Evaluate expression: 98 = 00000000`00000062
  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值