一.Net CoreClr 2.0底编译和调试。一.Net CoreClr 2.0之编译和调试。

稍微目标:我们的目的是用.Net
Core 2.0 SDK编译一个有点控制台程序 test_core.dll ,然后用VS2017
Debug 
coreclr
源码 ,接下就好详细调试、查看test_core.dll
IL代码是怎么一步步jit成Native代码的。**

微目标:我们的目的是用.Net
Core 2.0 SDK编译一个不怎么控制台程序 test_core.dll ,然后用VS2017
Debug 
coreclr
源码 ,接下就是得详细调试、查看test_core.dll
IL代码是怎么一步步jit成Native代码的。**

 

 

1.下蛋充斥最新 coreclr
源码连切换到release/2.0.0区划支 ,本文章主要目的是学习coreclr源码,由于主Master代码一直于创新,好多新题材并无立即修复,选用release分支可以避多编译问题,同时也很稳定。

1.产充斥最新 coreclr
源码并切换到release/2.0.0划分支 ,本文章主要目的是学coreclr源码,由于主Master代码一直在创新,好多初题材并从未及时修复,选用release分支可以避免多编译问题,同时也坏平稳。

2.准备coreclr编译环境 ,本次选用Win10系统,VS2017编译和调试(本机VS2015,VS2017都安了)。

2.准备coreclr编译环境 ,本次选用Win10体系,VS2017编译和调试(本机VS2015,VS2017还安装了)。

3.全副准备便绪coreclr目录打开控制台 .\build
skiptests,漫长等待,编译完成如下:

3.合准备便绪coreclr目录打开控制台 .\build
skiptests,漫长等待,编译完成如下:

图片 1

图片 2

4.配置Debug,Github上产生有关描述,但是正如老,并无完全好用,下面进入我个人知道,重新整理如下:

4.配置Debug,Github上出相关描述,但是于一直,并无净好用,下面进入自己个人了解,重新整理如下:

  • a. 找到文件夹 coreclr\bin\obj\Windows_NT.x64.Debug
    ,VS2017打开 CoreCLR.sln
  • b.设置 INSTALL工程也启动项目。
  • c.设置 INSTALL工程->右键properties ->Debugging。
  • d.设置
    Command=$(SolutionDir)..\..\product\Windows_NT.$(Platform).$(Configuration)\corerun.exe。
  • e.设置 Command Arguments=<managed app you wish to run> (e.g.
    test_core.dll)。
  • f.设置
    Directory=$(SolutionDir)..\..\product\Windows_NT.$(Platform).$(Configuration)以此文件夹包含了编译
    CoreCLR 生成的dll和pdb文件。
  • g.设置 Environment=CORE_LIBRARIES=C:\Program
    Files\dotnet\shared\Microsoft.NETCore.App\2.0.3
    (此安排告诉CoreCLR去之路去探寻基础托管类库,不安排debug会抛错,为了便利直接对本机.Net
    Core SDK内文件夹)。
  • a. 找到文件夹 coreclr\bin\obj\Windows_NT.x64.Debug
    ,VS2017打开 CoreCLR.sln
  • b.设置 INSTALL工程为启动项目。
  • c.设置 INSTALL工程->右键properties ->Debugging。
  • d.设置
    Command=$(SolutionDir)..\..\product\Windows_NT.$(Platform).$(Configuration)\corerun.exe。
  • e.设置 Command Arguments=<managed app you wish to run> (e.g.
    test_core.dll)。
  • f.设置
    Directory=$(SolutionDir)..\..\product\Windows_NT.$(Platform).$(Configuration)此文件夹包含了编译
    CoreCLR 生成的dll和pdb文件。
  • g.设置 Environment=CORE_LIBRARIES=C:\Program
    Files\dotnet\shared\Microsoft.NETCore.App\2.0.3
    (此布局告诉CoreCLR去者路去摸索基础托管类库,不布置debug会抛错,为了便于直接对本机.Net
    Core SDK内文件夹)。

一体化配置如下: 

完整配置如下: 

图片 3

图片 4

小总结:现毕共涉及到3方dll(托管和非托管):

小总结:今日收共涉及到3方dll(托管和非托管):

  • 俺们团结一心编译的托管 test_core.dll ,也是最主要实验对象。
  • .NET Core
    SDK的托管基础类库System.Runtime.dll、System.Threading.dll、、、等(test_core.dll
    相关托管依赖)。
  • 咱编译的CoreClr非托管dll,coreclr.dll、clrjit.dll、CoreRun.exe、、等,是我们要的Debug对象。
  • 我们好编译的托管 test_core.dll ,也是要实验目标。
  • .NET Core
    SDK的托管基础类库System.Runtime.dll、System.Threading.dll、、、等(test_core.dll
    相关托管依赖)。
  • 俺们编译的CoreClr非托管dll,coreclr.dll、clrjit.dll、CoreRun.exe、、等,是我们着重的Debug对象。

5.用编译test_core.dll

5.用编译test_core.dll

用.Net Core2.0 SDK编译如下代码,如何编译自行脑补

用.Net Core2.0 SDK编译如下代码,如何编译自行脑补

 1 using System;
 2 using System.Runtime.CompilerServices;
 3 
 4 namespace test_core
 5 {
 6     class Program
 7     {
 8         const int Pass = 100;
 9         const int Fail = -1;
10         [MethodImplAttribute(MethodImplOptions.NoInlining)]
11         public static void DblRoots(double a, double b, double c, ref double r1, ref double r2)
12         {
13             r1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
14             r2 = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
15             return;
16         }
17         static int Main(string[] args)
18         {
19             double x1 = 0;
20             double x2 = 0;
21             DblRoots(1d, -5d, 6d, ref x1, ref x2);
22             Console.WriteLine(x1 + "," + x2);
23             if (System.Math.Abs(x1 - 3d) > Double.Epsilon) return Fail;
24             if (System.Math.Abs(x2 - 2d) > Double.Epsilon) return Fail;
25             string str = Console.ReadLine();
26             return Pass;
27 
28         }
29     }
30 }
 1 using System;
 2 using System.Runtime.CompilerServices;
 3 
 4 namespace test_core
 5 {
 6     class Program
 7     {
 8         const int Pass = 100;
 9         const int Fail = -1;
10         [MethodImplAttribute(MethodImplOptions.NoInlining)]
11         public static void DblRoots(double a, double b, double c, ref double r1, ref double r2)
12         {
13             r1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
14             r2 = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
15             return;
16         }
17         static int Main(string[] args)
18         {
19             double x1 = 0;
20             double x2 = 0;
21             DblRoots(1d, -5d, 6d, ref x1, ref x2);
22             Console.WriteLine(x1 + "," + x2);
23             if (System.Math.Abs(x1 - 3d) > Double.Epsilon) return Fail;
24             if (System.Math.Abs(x2 - 2d) > Double.Epsilon) return Fail;
25             string str = Console.ReadLine();
26             return Pass;
27 
28         }
29     }
30 }

以编译生成内容全copy到coreclr\bin\Product\Windows_NT.x64.Debug目录中

用编译生成内容总体copy到coreclr\bin\Product\Windows_NT.x64.Debug目录中

图片 5

图片 6

6.VS2017饱受安装断点并运行查看test_core.dll的运作结果

6.VS2017遭到安断点并运行查看test_core.dll的运行结果

图片 7

图片 8

7.接下来就是发挥想象力的当儿了,可以参照 GitHub coreclr
文档,关键岗位下断点,调试ryujit核心代码。

7.接下来便达想象力的时段了,可以参见 GitHub coreclr
文档,关键位置下断点,调试ryujit核心代码。

图片 9

图片 10

图片 11

图片 12

8.望这文能帮助大家更爱的Debug CoreClr,欢迎各路大用点。

8.巴以此文能帮助大家再爱的Debug CoreClr,欢迎各路大用点。

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注