繁体   English   中英

Visual Studio调试器如何推断监视窗口内的Value?

[英]How the Visual Studio debugger infer Value inside watch window?

例如,在监视窗口中,我看到:

名称 :任务
:Id = 11,状态= WaitingToRun,方法=“无效< RetreiveFromCache > b__0()”
类型 :System.Threading.Tasks.Task

因此, task变量的类型为Task,我想访问调试器打印的相同值,特别是我对Method值( RetreiveFromCache )感兴趣

但是在task变量上,我只能访问.Id,.Status等...,而不能访问.Method

Method值从何而来?

调试器如何“推断” Method值?

您可以覆盖ToString()方法。 这是简单的方法,但是您正在寻找的是以下类:

  • DebuggerDisplayAttribute
  • DebuggerBrowsableAttribute

有关更多信息,请参见https://msdn.microsoft.com/es-es/library/ms228992(v=vs.110).aspx

Task对象的Action变量不可访问。 您可以做的是创建自己的类,该类扩展Task的功能,同时公开Action(该操作包含有关要运行的方法的信息)。

一个简单的例子:

public class CustomTask : Task
{
    private Action m_action;

    public Action Action
    {
        get { return m_action; }
    }

    public CustomTask(Action action) : base(action)
    {
        m_action = action;
    }
}

然后在您的代码中,可以像这样使用它:

CustomTask ct = new CustomTask(MyMethod);

Console.WriteLine("ID: {0}, Method: {1}, Status: {2}", ct.Id, ct.Action.Method, ct.Status);
//Prints: "ID: 1, Method: Void MyMethod(), Status: Created"

ct.Start();
Console.WriteLine("ID: {0}, Method: {1}, Status: {2}", ct.Id, ct.Action.Method, ct.Status);
//Prints: "ID: 1, Method: Void MyMethod(), Status: WaitingToRun"

ct.Wait();
Console.WriteLine("ID: {0}, Method: {1}, Status: {2}", ct.Id, ct.Action.Method, ct.Status);
//Prints: "ID: 1, Method: Void MyMethod(), Status: RanToCompletion"

请注意,要访问有关该方法的信息,您必须访问ct.Action.Method

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM