取以下函数:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在这个函数中设置断点时,是否有可能检查返回值?Go()直接耦合到.aspx页面中的数据网格。
检查返回数据表的唯一方法是使用临时变量。然而,这有点不方便。没有别的办法了吗?
取以下函数:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在这个函数中设置断点时,是否有可能检查返回值?Go()直接耦合到.aspx页面中的数据网格。
检查返回数据表的唯一方法是使用临时变量。然而,这有点不方便。没有别的办法了吗?
当前回答
接受的答案在Visual Studio 2015中不能正常工作,但是通过在方法的最后一行上放置断点并按F10,它将把返回值的所有表达式放入locals窗口。
其他回答
将返回表达式拖放到观察窗口中。
例如,在语句中
return someTableAdapter.getSomeData();
拖放
someTableAdapter.getSomeData()
进入一个观察窗口,你会看到数值。
你可以对任何表达式这样做。
据我所知没有。请注意,如果你添加了一个变量,它将被编译器在发布版本中删除…
更新: 这个功能已经被添加到VS2013中。 您可以在自动窗口中看到返回值,或者在监视/立即窗口中使用$ReturnValue。
该值只能在函数返回后直接看到,因此访问它的最简单方法是在函数调用上设置断点,然后跳过(F10)调用。
VS2015更新:boo!不幸的是,它似乎不在VS2015 (devenv v14) VS2017更新:它回来了。(devenv v15)
在VS2019中,只需打开调试->Windows->汽车窗口。在那里,你看到concat返回值如下所示:
接受的答案在Visual Studio 2015中不能正常工作,但是通过在方法的最后一行上放置断点并按F10,它将把返回值的所有表达式放入locals窗口。
有很多变通办法,但似乎没有一个令人满意。
下面引用约翰·斯基特的话(对现已删除的答案的评论):
对我来说还是不方便 特别是如果你不知道是哪一个 返回你需要的值 在开始调试之前。我真的 不想要有一个临时的 变量混乱我的代码每 每次我还东西的时候
理论上,调试器可以有一个返回变量。毕竟:它只是堆栈上的一个变量:
unsafe {
int * sp = stackalloc int[1];
try {
return a+b;
}
finally {
Trace.WriteLine("return is " + *(sp+3));
}
}
因此,请将此视为Visual Studio的一个特性请求。