Windbg使用和 编译CoreCLR(Runtime)的总结

  1. windbg 下载符号的时候,需要FQ自挂梯子,否则是无法下载的或者下载错误不完全等问题,很麻烦

  2. 如果调试.net EXE程序,如果是.net core 是无法调试的,ld ConsoleApp的时候提示无法找到Module Symbols。如果是.net framework 是可以的。如果是DLL调试,frameworkd 也是可以的,.net core不行。.net core只能转出之后,再加上.net core sos 以及coreclr 地址,然后才能dump 堆栈的状况

  3. 关于编译.net clr 。.net core 称之为 coreclr ,.net 5 以及之后称之为 runtime 。在安装了cmake ,python ,git,以及ninje ,还有保证powershell 4.0以上的情况下,以及安装了visual studio 2019 ,在windows 下面编译,尝试了各种runtime版本,是无法被编译出来的,各种问题,各种报错。甚至直接在cmake生成C++的时候,就出现错误。没办法,回退到vs2017 版本,尝试了编译coreclr的2.2.5版本,是直接编译通过的,生成也很顺利。但是由于事先没有安装.net core 程式,导致了无法生成.net core 控制台应用程序,以进行调试。于是重新安装了下vs2017 ,打开coreclr.sln报错,于是删除重新下载,然后编译成功。但是出现了一个错误。在右击Instacll属性,点击调试选项,然后输入当前调试的DLL环境CORE_LIBRARIES=C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.23,就不报错了。但是这种情况也是因人而异的似乎,之前的机器上2.1版本.netcore 控制台是无法运行的报错,2.0就可以。但是现在的机器上似乎两者都可以,这个有待以后检测。

至此基本上把windbg和 coreclr 都在windows上搞定和编译出来的了
如下图所示

coreclr调试.net core 控制台dll 运行信息显示
在这里插入图片描述
coreclr 调试.net core dll 运行的结果如下红框所示
在这里插入图片描述

.Net core 控制台

using System;
namespace ConsoleApp4
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            int i = 22;
            string a = "aaaa";
            Console.WriteLine("Tian Xia Feng Yun Chu Wo Bei");
            Console.ReadLine();
        }
    }
}

windbg分析
在这里插入图片描述第一个红色框里面16进制的16就是10进制22,因为int i是值类型,直接存储。第二个框是string 类型的类型结构,第三个框是string 类型的字符串个数,因为字符串为"aaaa",所以为4.第四和四五个框就是存储的字符串"aaaa" 用 6100表示。

至此,可以利用windbg和coreclr 来调试以及观察 .net 运行状态。

猜你喜欢

转载自blog.csdn.net/tangyanzhi1111/article/details/109807339