【问题标题】:Can breakpoint actions print the return value?断点动作可以打印返回值吗?
【发布时间】:2019-03-06 12:55:36
【问题描述】:

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

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);
}

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

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

下图说明了我想要完成的事情。

这当然行不通,然后打印:

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

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

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

【问题讨论】:

  • @SeM 在输出窗口中输出它们
  • 为什么不在调用部分使用Debug.Print(yourMethodReturnValue)
  • 只有有限的关键字列表(如 $FUNCTION)可以通过断点返回,并且 $ReturnValue 不是一个,您的错误消息来自这里。为了输出函数的返回值,我会在返回值之前使用一个简单的 Console.WriteLine()。

标签: c# .net visual-studio debugging


【解决方案1】:

您可以在方法调用之后放置断点并像这样添加断点操作:

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。

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

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

输出将是:

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

【讨论】:

  • 该方法正在整个项目的多个地方被调用;我希望有一种方法来处理所有呼叫,而无需向每个呼叫站点添加代码。
  • @waldrumpus 我也添加了另一种方法。
  • 感谢您的更新;第二种方法需要我为每个返回语句编写一个单独的操作。这可以避免吗?以我的更新为例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多