取以下函数:

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

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

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


当前回答

前。net时代的老把戏:打开寄存器窗口并查看EAX寄存器的值。它包含最后调用的函数的返回值。

其他回答

将返回表达式拖放到观察窗口中。

例如,在语句中

return someTableAdapter.getSomeData();

拖放

someTableAdapter.getSomeData()

进入一个观察窗口,你会看到数值。

你可以对任何表达式这样做。

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

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

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

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

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

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

在VS2019中,只需打开调试->Windows->汽车窗口。在那里,你看到concat返回值如下所示:

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

someTableAdapter.getSomeData();

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

微软Visual c++曾经这样做,但Visual Studio不AFAIK..:(