取以下函数:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在这个函数中设置断点时,是否有可能检查返回值?Go()直接耦合到.aspx页面中的数据网格。
检查返回数据表的唯一方法是使用临时变量。然而,这有点不方便。没有别的办法了吗?
取以下函数:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在这个函数中设置断点时,是否有可能检查返回值?Go()直接耦合到.aspx页面中的数据网格。
检查返回数据表的唯一方法是使用临时变量。然而,这有点不方便。没有别的办法了吗?
当前回答
前。net时代的老把戏:打开寄存器窗口并查看EAX寄存器的值。它包含最后调用的函数的返回值。
其他回答
您可以尝试选择“someTableAdapter.getSomeData();”,右键单击它,然后选择快速观察。
有很多变通办法,但似乎没有一个令人满意。
下面引用约翰·斯基特的话(对现已删除的答案的评论):
对我来说还是不方便 特别是如果你不知道是哪一个 返回你需要的值 在开始调试之前。我真的 不想要有一个临时的 变量混乱我的代码每 每次我还东西的时候
理论上,调试器可以有一个返回变量。毕竟:它只是堆栈上的一个变量:
unsafe {
int * sp = stackalloc int[1];
try {
return a+b;
}
finally {
Trace.WriteLine("return is " + *(sp+3));
}
}
因此,请将此视为Visual Studio的一个特性请求。
接受的答案在Visual Studio 2015中不能正常工作,但是通过在方法的最后一行上放置断点并按F10,它将把返回值的所有表达式放入locals窗口。
使用Shift-F11走出go()方法,然后在“Autos”调试窗口中,它将显示方法调用的返回值,该方法调用刚刚弹出堆栈(在这种情况下,go()方法是你想要的)。这是Visual Studio 2005中的行为;我还没有使用Visual Studio 2008,所以我不知道这个行为是否在那个版本相同。
是的,通过切换到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).