【问题标题】:How to evaluate global methods and fields when debugging?调试时如何评估全局方法和字段?
【发布时间】:2018-05-12 21:01:36
【问题描述】:

通过 CIL 编辑,人们可以添加不属于任何类或命名空间的方法和字段。

在程序集中,有一个类internal class <Module>,它包含所有这些全局变量。 可以使用 IL 工具(Mono.Cecil、dnlib)或反编译工具(dnSpy)查看这些方法代码和字段。

有没有办法在 Visual Studio 中评估或查看调试值?

【问题讨论】:

    标签: .net visual-studio cil


    【解决方案1】:

    最简单的方法是使用public static class Globals 并将所有全局变量存储在那里。

    然后,在您的所有文件中,您都使用using static Globals。 (如果Globals 存在于命名空间中,则必须使用它的全名)。 using static <ClassName> 让您可以使用所有静态字段和方法,而无需指定类,使其看起来像是属于当前类,或者像是全局类,例如:

    public static class Globals
    {
        public int GlobalInt { get; set; } = 42;
        public int GlobalMethod() => 42;
    }
    

    没有using static

    public void Main(string[] args)
    {
        Console.WriteLine(Globals.GlobalInt);
        Console.WriteLine(Globals.GlobalMethod);
    }
    

    using static:

    using static Globals;
    
    public void Main(string[] args)
    {
        Console.WriteLine(GlobalInt);
        Console.WriteLine(Globals.GlobalMethod);
    }
    

    话虽如此,使用全局变量通常被认为是不好的做法(因此为什么 C# 没有它们),因为任何类都可以更改它的值并且很容易丢失跟踪。但是,全局常量、全局只读或具有私有设置器的全局属性都可以。

    【讨论】:

    • 问题是关于评估 IL 修改程序集的代码。
    • 你的意思是“评估代码”吗?除此之外,你为什么要这样做,你想做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多