【问题标题】:Debug return value调试返回值
【发布时间】:2019-11-26 03:38:26
【问题描述】:

我记得当我在 Visual Studio 6.0 中调试 C++ 代码时,我可以看到方法的返回值。 现在我在 Visual Studio 2010 的 C# 中缺少该功能。
我在哪里可以看到返回值或者有没有显示它的原因?

编辑1: 一个例子:

string GetFullName()
{
  return GetFirstName() + " " + GetLastName();
}

当我从以 return 开头的行开始(调试器)到下一行时,我想在调试变量窗口中查看全名。

【问题讨论】:

  • 您可以在 Watch 窗口中调用该方法并在那里查看其返回值。这是你的意思吗?
  • @sha No in C++ 我可以跳出一个方法,返回值自动列在调试变量窗口中。
  • 哦,在这种情况下,我担心它只是没有实现。

标签: c# visual-studio visual-studio-2010 debugging


【解决方案1】:

这是在 Visual Studio 2013 中添加的:

返回值显示在“Autos Windows”(调试->Windows->Autos)中,您还可以在监视和/或立即窗口中使用伪变量“$ReturnValue”来获取最后一个函数的返回值。

http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx

【讨论】:

  • 您介意在答案中描述解决方案吗?这样可以避免跳出 SO,并且会在链接失效的情况下提供静态副本。
  • 您可以使用$exception 变量对异常执行相同的操作。就像它们在命名和大小写上的一致性一样。干得好。
【解决方案2】:

看到这个:https://connect.microsoft.com/VisualStudio/feedback/details/555859/see-return-value-in-managed-code(你可以投票)

还有一个人的评论,他为 VS 开发了一个插件来支持它。

更新。试过那个插件。现在看起来很棒。

【讨论】:

  • 谢谢。我会试试插件。
  • 我尝试了 BugAid 插件,它可以工作。您需要将其设置为完整模式才能使用返回视图功能。这是一个测试版,该版本仅对开源项目和 MVP 开放。
  • 我刚刚在 BigAid 主页 (bugaidsoftware.com/purchase) 上看到商业许可证不是免费的,尽管它只是一个测试版。所以我必须卸载它,因为我找不到任何关于商业用户试用版的提示。
  • 您已经从官方网站下载并安装了该应用程序。我不认为你在做任何违法的事情,除非你下载一些非官方版本。
  • @brgerner 大家好,我是 BugAid 的共同创建者。 BugAid 有 60 天的免费试用期,您可以将其免费用于任何目的(商业或其他)。我希望你会发现它有用!很抱歉造成混淆 - 我们会尽量在我们的网站上更清楚地说明这是一个完全免费的 60 天试用期。
【解决方案3】:

您可以使用该方法在 return 语句的行上设置断点。然后右键单击断点并选择“当命中...”。在这里,您可以选择显示消息或运行宏。为此,我们将打印一条消息,该消息将显示在输出窗口中。例如,如果您有以下代码:

public double ReturnValue()
{
    var x = 3;
    var y = 4;
    //x and y can of course be non-constant vars too
    return Calculate(x, y);
}

public static double Calculate(int x, int y)
{
    return x * x + y * y;
}

如果您在“return Calculate(x, y);”行上设置断点,请右键单击它并选择“When Hit...”并选择此作为消息:

值为:{Calculate(x, y)}

在这种情况下,输出窗口将显示:

值为:25.0

希望这会有所帮助!

更新:

这也适用于您的示例名称、方法:

public string GetFirst()
{
    return "Bill";
}

public string GetLast()
{
    return "Gates";
}

public string GetFull()
{
    return GetFirst() + " " + GetLast();
}

在 GetFull() 方法中的 return 语句上放置断点,并执行与之前相同的操作。消息体现在看起来像这样:

全名是:{GetFirst() + " " + GetLast()}

输出窗口会显示:

全名:“比尔·盖茨”

【讨论】:

  • 谢谢。这个解决方案是否比在 Watch 窗口中编写调用更好?我想在 Watch 窗口中输入呼叫会更快。
  • Watch 的问题是你必须放置一个断点,在调试时选择方法并选择'add watch'。您不能右键单击方法调用并选择“添加手表”,因为这会在手表的值中产生错误。我的解决方案的“设置”需要更长的时间,但在调试时你不必担心。我刚刚给出了一个解决方案,可以按照您的要求立即查看方法调用的返回值... :)
【解决方案4】:

只需在调试代码时,在计算返回值时,执行以下操作之一:

1- 在即时窗口中输入 $ReturnValue

2- 在观察窗口中观察 $ReturnValue

【讨论】:

    【解决方案5】:

    看不到返回值看类似的相关问题

    Can I find out the return value before returning while debugging in Visual Studio

    您可以将结果存储到字符串变量中,以便在调试窗口中列出。

    class Program
        {
            static void Main(string[] args)
            {
                Program p = new Program();
                Console.WriteLine(p.GetFullName());
                Console.ReadLine();   
            }
    
            string GetFullName()
            {
                string result =GetFirstName() + " " + GetLastName();
                return result;
            }
    
            string GetFirstName()
            {
                string firstname = "vishwanath";
                return firstname;
            }
    
            string GetLastName()
            {
                string lastname = "Dalvi";
                return lastname;
            }
        }
    

    【讨论】:

    • 附加变量只是经常调试的方法的一个选项。
    • 我刚刚在此页面右侧的 Related 列表中发现了另一个相关问题:stackoverflow.com/questions/1704268/…。输入问题时的 SO 搜索似乎不如 Related 列表好。我猜 ask-question-search 不关心标签字段。
    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2020-09-19
    • 2012-03-27
    相关资源
    最近更新 更多