debugging 调试vtable工作

rqenqsqc  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(119)
internal class SchoolCalendar
    {
        public void GetSchoolYear()
        {
            Console.WriteLine("Base GetSchoolYear called from: " + this);
            LeapYear();
        }

        public virtual void LeapYear()
        {
            Console.WriteLine("Base Leap Year");
        }
    }

    internal class DerrivedSchoolCalendar : SchoolCalendar
    {
        public override void LeapYear()
        {
            Console.WriteLine("Derrived Leap Year");
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            SchoolCalendar bsy = new DerrivedSchoolCalendar();
            bsy.GetSchoolYear();
        
        }
    }

在上面的代码中,基类调用基类方法,并且所述方法调用虚方法。我试图更详细地了解vtable是如何工作的。尤其是事物的秩序。我学到的是,在这段代码中,派生类的vtable被调用。我认为首先调用基类的vtable,然后才调用指向第二个vtable的指针。
我想知道更多和更好的关于它的工作顺序在任何vtable。有没有一种方法来调试我只想遵循vtable访问的想法?(注意,我对反射一无所知,例如,请温柔一点)。

ndh0cuux

ndh0cuux1#

用户@HansPassant发表了一条评论,我认为这就是答案。WinDvg的SOS扩展与dumpmt命令相结合将提供数据来解决我自己的问题。

相关问题