断点操作可以打印返回值吗?

时间:2019-03-06 12:55:36

标签: c# .net visual-studio debugging

我试图输出使用断点操作的方法返回的值。该方法包含多个不同的return语句,类似于此示例:

double Foo(int bar, int baz)
{
    if (bar < 0)
        return Math.Sqrt((double)(baz - bar) * (baz - bar));

    if (bar % baz == 0)
    {
        if (baz == 3)
        {
            return bar / 2 * baz;
        }
        else
        {
            return Math.Pow(bar, baz);
        }
    }

    return Math.Log(baz, bar);
}

我正在寻找一种输出返回值的方法,而无需诉诸重构该方法,以使其将值存储在变量中,或者在每个return语句上设置一个断点,并且必须为每个return语句编写单独的动作。

已接受的this question答案表明,有可能在离开方法之前使用立即窗口中的$ReturnValue关键字检查返回值。

下图说明了我想要完成的工作。

enter image description here

这当然不行,请打印:

  

调试的Foo(“ 1”,false)=错误CS0103:名称“ $ ReturnValue”在当前上下文中不存在。

虽然有几个可用的关键字,例如$CALLER$TNAME,但我没有找到能产生返回值的任何内容。

是否可以在单个断点操作中打印返回值?

1 个答案:

答案 0 :(得分:2)

您可以在方法调用之后放置断点,并添加断点操作,如下所示:

static int Sum(int a, int b) => a + b;

static void Main(string[] args)
{
    int sum = Sum(1,2);
    {} // add breakpoint here
}

和操作代码:

Sum returned {x}.

它将在输出窗口中打印:

  

总和为3。

OR

将断点放入方法的返回部分(在本例中为a + b),并添加

之类的操作
$FUNCTION result is {a + b}

输出将是:

  

MyApp.Program.Sum(int,int)结果为3