【问题标题】:Modifying method return value for managed code in Visual Studio 2010 debugger在 Visual Studio 2010 调试器中修改托管代码的方法返回值
【发布时间】:2010-09-15 15:00:00
【问题描述】:

假设我有这个 C# 方法:

public bool GetVal()
{
    return a1 == b1 || c1 == d1 || GetE1() == GetF1(); // Illustrating complicated logic here..
}

我不想修改上面语句中变量的内容/方法的返回值,但是想给调用GetVal()的方法返回false。

是否可以使用 VS2010 调试器以某种方式修改返回值,就像我可以即时修改变量值一样?也许以某种方式修改调用堆栈?

【问题讨论】:

  • 为什么不在返回完成后修改该值,假设您将它分配给调用位置的变量。
  • 重点是不要修改任何源代码,以免重新编译。

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


【解决方案1】:

这种方式不能直接修改返回值。与 C++ 相比,托管代码非常有限/不支持查看函数调用的返回值。

但是你可以做的是去调用站点并修改分配函数调用值的变量。

【讨论】:

    【解决方案2】:
    public bool GetVal()
    {
        bool retval = a1 == b1 || c1 == d1 || GetE1() == GetF1();
    // edit retval to be 'false' in the debugger now
        return retval;
    }
    

    【讨论】:

      【解决方案3】:

      我经常发现自己需要同样的东西,不幸的是,唯一的方法是创建一个临时变量,您可以在函数返回之前通过 Locals 或 Watch 窗口进行更改。

      public bool GetVal()
      {
          bool b = a1 == b1 || c1 == d1 || GetE1() == GetF1();
          return b;//Set breakpoint here
      }
      

      【讨论】:

        【解决方案4】:
        public bool GetVal()
        {
            var result = a1 == b1 || c1 == d1 || GetE1() == GetF1(); // Illustrating complicated logic here..
            return result;
        }
        

        在返回行设置断点并修改结果变量。

        【讨论】:

          【解决方案5】:

          正如其他答案所述:

          public bool GetVal()
          {
              bool result = a1 == b1 || c1 == d1 || GetE1() == GetF1();
              return result;
          }
          

          完美运行。但是,一般来说,将大量 if 语句串在一起的代码无论如何都难以阅读和调试。

          您应该将函数分解为多个步骤,而不是让它在一行中执行所有步骤。

          完成任务的另一种方法是在代码中设置断点if(GetVal()) 并从那里简单地修改执行路径,而不是尝试修改返回值,只需修改值所在的事务状态使用

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-10-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-27
            • 1970-01-01
            相关资源
            最近更新 更多