取以下函数:

DataTable go() {
    return someTableAdapter.getSomeData();
}

当我在这个函数中设置断点时,是否有可能检查返回值?Go()直接耦合到.aspx页面中的数据网格。

检查返回数据表的唯一方法是使用临时变量。然而,这有点不方便。没有别的办法了吗?


当前回答

有很多变通办法,但似乎没有一个令人满意。

下面引用约翰·斯基特的话(对现已删除的答案的评论):

对我来说还是不方便 特别是如果你不知道是哪一个 返回你需要的值 在开始调试之前。我真的 不想要有一个临时的 变量混乱我的代码每 每次我还东西的时候

理论上,调试器可以有一个返回变量。毕竟:它只是堆栈上的一个变量:

unsafe {
  int * sp = stackalloc int[1];
  try {
    return a+b;
  }
  finally {
    Trace.WriteLine("return is " + *(sp+3));
  }
}

因此,请将此视为Visual Studio的一个特性请求。

其他回答

据我所知没有。请注意,如果你添加了一个变量,它将被编译器在发布版本中删除…

更新: 这个功能已经被添加到VS2013中。 您可以在自动窗口中看到返回值,或者在监视/立即窗口中使用$ReturnValue。

该值只能在函数返回后直接看到,因此访问它的最简单方法是在函数调用上设置断点,然后跳过(F10)调用。


VS2015更新:boo!不幸的是,它似乎不在VS2015 (devenv v14) VS2017更新:它回来了。(devenv v15)

我知道的唯一方法是在返回行上放置一个断点,然后调用Quick Watch窗口并输入返回的表达式:

someTableAdapter.getSomeData();

但这只有在调用不改变任何对象的状态时才有效(因为当您恢复执行时,将会对同一方法进行第二次调用)。

是的,有一个很好的方法。一个显著的缺点是你必须等待5年,也许6年。自从我看到你在2008年11月发的帖子,我建议你waaaaaa…

……aaaait。瞧!只是为了你,微软发布了最新的Visual Studio 2013,它是在调试模式下运行时从菜单中访问的默认功能(菜单debug→Windows→Autos)。

是的,通过切换到VB.NET。P)你刚才说了“Visual Studio”。,)

在我的记忆中(从Visual Basic到VB.NET的所有版本),您可以简单地查询函数名。它像一个局部变量一样“起作用”,在函数开始时隐式声明,它的当前值也被用作函数通过非返回语句退出时的返回值(即Exit function或只是falling through),当然,当使用return语句时。

它还被设置为return语句的表达式。就像局部变量一样,它的值可以在函数内部的任何执行点检查(包括在return语句执行之后)。c#没有,也应该有。

That little VB.NET feature (plus the Exit Function statement which it enables - another feature C# doesn't have and should) is very useful in a form of defensive programming I practice where I always initialize the function name to the failure/default value as the first statement. Then, at any failure point (which normally occurs much more often than success points), I can simply call the Exit Function statement (i.e. without having to duplicate the failure / default expression or even a constant/variable name).

根据客户反馈网站,这可以在Visual Studio 2013中使用CLR 4.5.1完成。它在以前的c#版本中不可用。

(Visual Studio 2008和更早的版本支持VB.NET。C/ c++开发人员一直可以使用它。)