考虑以下函数:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在这个函数中设置一个断点时,有没有可能检查返回值?go()
直接与.aspx
页面中的datagrid相耦合。检查返回的datatable的唯一方法是使用临时变量。不过,那有点不方便。还有其他方法吗?考虑以下函数:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在这个函数中设置一个断点时,有没有可能检查返回值?go()
直接与.aspx
页面中的datagrid相耦合。检查返回的datatable的唯一方法是使用临时变量。不过,那有点不方便。还有其他方法吗?我不知道有没有这样的功能。请注意,如果您添加了一个变量,在发布版本中编译器会将其删除...
更新:
VS2013已经添加了此功能。
您可以在自动窗口中查看返回值,或者在监视/立即窗口中使用$ReturnValue
(或$ReturnValue1
或$returnvalue
,具体取决于VS版本)。
该值只能在从函数返回后直接查看,因此访问它最简单的方法是在函数调用上设置断点并跨过(F10)调用。
VS2015更新:糟糕!不幸的是,它似乎不在VS2015中(devenv v14)
VS2017更新:它回来了。(devenv v15)
关于Visual Studio 2015:
根据Marc Gravell目前被接受的答案:
这个功能已经添加到Visual Studio 2013中。您可以在自动窗口中查看返回值,或者在监视/立即窗口中使用$ReturnValue。
该答案还指出,此功能在Visual Studio 2015中无法使用。这不是完全正确的。在检查方法调用的返回值中有以下说明:
您必须启用遗留表达式评估器才能识别$ReturnValue (工具/选项/调试/使用遗留C#和VB表达式评估器)。否则,您可以使用$ReturnValue1。
我在Visual Studio 2015 Enterprise中进行了测试:
DataTable go(){return someTableAdapter.getSomeData();}
因为它会展示给你someTableAdapter.getSomeData()
的返回值。
但不包括:
int go(){return 100 * 99;}
从 .NET 之前的老技巧:打开寄存器窗口并查看 EAX 寄存器的值。这个寄存器包含了上一个调用函数的返回值。
使用Shift-F11键退出go()方法,然后在“Autos”调试窗口中,它将显示刚从堆栈中弹出的方法调用的返回值(在本例中,这是您想要的go()方法)。这是Visual Studio 2005中的行为;我没有使用过Visual Studio 2008,所以不知道该版本是否以相同方式运行。
$ResultValueX
,其中X指函数调用顺序。因此,如果您有这样的调用Multiply(Five(), Six())
,则会创建以下伪变量:Five() | $ResultValue1 = 5
Six() | $ResultValue2 = 6
Multiply() | $ResultValue3 = 30